def del_dups(seq):
    seen = {}
    pos = 0
    for item in seq:
        if item not in seen:
            seen[item] = True
            seq[pos] = item
            pos += 1
    del seq[pos:]

def del_dups_set(seq):
    seen = set()
    seen_add = seen.add
    pos = 0
    for item in seq:
        if item not in seen:
            seen_add(item)
            seq[pos] = item
            pos += 1
    del seq[pos:]
    
def del_dups_fromkeys(seq):
	seq[:] = dict.fromkeys(seq)

lst = [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18,
       13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1,
       5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9,
       9, 3, 7, 7, 6, 6, 7, 5, 14, 18, 12, 19, 2, 8, 9, 0, 8, 4, 5]

def measure(func):
    from timeit import Timer

    N = 50000
    setup = 'from __main__ import lst, del_dups, del_dups_set, del_dups_fromkeys'
    t = Timer('%s(lst[:])' % (func,), setup)
    print("%s: %.2f us" % (func, 1e6*min(t.repeat(number=N))/N,))

if __name__=="__main__":
    measure('del_dups')
    measure('del_dups_set')
    measure('del_dups_fromkeys')