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:]
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'
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')
ZGVmIGRlbF9kdXBzKHNlcSk6CiAgICBzZWVuID0ge30KICAgIHBvcyA9IDAKICAgIGZvciBpdGVtIGluIHNlcToKICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWVuOgogICAgICAgICAgICBzZWVuW2l0ZW1dID0gVHJ1ZQogICAgICAgICAgICBzZXFbcG9zXSA9IGl0ZW0KICAgICAgICAgICAgcG9zICs9IDEKICAgIGRlbCBzZXFbcG9zOl0KCmRlZiBkZWxfZHVwc19zZXQoc2VxKToKICAgIHNlZW4gPSBzZXQoKQogICAgc2Vlbl9hZGQgPSBzZWVuLmFkZAogICAgcG9zID0gMAogICAgZm9yIGl0ZW0gaW4gc2VxOgogICAgICAgIGlmIGl0ZW0gbm90IGluIHNlZW46CiAgICAgICAgICAgIHNlZW5fYWRkKGl0ZW0pCiAgICAgICAgICAgIHNlcVtwb3NdID0gaXRlbQogICAgICAgICAgICBwb3MgKz0gMQogICAgZGVsIHNlcVtwb3M6XQoKbHN0ID0gWzgsIDgsIDksIDksIDcsIDE1LCAxNSwgMiwgMjAsIDEzLCAyLCAyNCwgNiwgMTEsIDcsIDEyLCA0LCAxMCwgMTgsCiAgICAgICAxMywgMjMsIDExLCAzLCAxMSwgMTIsIDEwLCA0LCA1LCA0LCAyMiwgNiwgMywgMTksIDE0LCAyMSwgMTEsIDEsCiAgICAgICA1LCAxNCwgOCwgMCwgMSwgMTYsIDUsIDEwLCAxMywgMTcsIDEsIDE2LCAxNywgMTIsIDYsIDEwLCAwLCAzLCA5LAogICAgICAgOSwgMywgNywgNywgNiwgNiwgNywgNSwgMTQsIDE4LCAxMiwgMTksIDIsIDgsIDksIDAsIDgsIDQsIDVdCgpkZWYgbWVhc3VyZShmdW5jKToKICAgIGZyb20gdGltZWl0IGltcG9ydCBUaW1lcgoKICAgIE4gPSA1MDAwMAogICAgc2V0dXAgPSAnZnJvbSBfX21haW5fXyBpbXBvcnQgbHN0LCBkZWxfZHVwcywgZGVsX2R1cHNfc2V0JwogICAgdCA9IFRpbWVyKCclcyhsc3RbOl0pJyAlIChmdW5jLCksIHNldHVwKQogICAgcHJpbnQoIiVzOiAlLjJmIHVzIiAlIChmdW5jLCAxZTYqbWluKHQucmVwZWF0KG51bWJlcj1OKSkvTiwpKQoKaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICBtZWFzdXJlKCdkZWxfZHVwcycpCiAgICBtZWFzdXJlKCdkZWxfZHVwc19zZXQnKQo=