from collections import Counter
from random import randrange
from timeit import repeat
from itertools import chain
def rearrange_list4( inp_list) :
uniques = set ( inp_list)
return list ( chain( uniques, ( Counter( inp_list) - Counter( uniques) ) .elements ( ) ) )
def just_set( inp_list) :
uniques = set ( inp_list)
def just_ctr( inp_list) :
Counter( inp_list)
def just_ctr2( inp_list) :
Counter( uniques)
def just_sub( inp_list) :
ctr - subtract
def finish( inp_list) :
list ( chain( uniques, diff.elements ( ) ) )
funcs = rearrange_list4, just_set, just_ctr, just_ctr2, just_sub, finish
a = [ randrange( 10000 ) for _ in range ( 30000 ) ]
uniques = set ( a)
ctr = Counter( a)
subtract = Counter( uniques)
diff = ctr - subtract
for _ in range ( 3 ) :
print ( )
for func in funcs:
t = min ( repeat( lambda : func( a) , number= 1 ) )
print ( '%5.2f ms ' % ( t * 1e3 ) , func.__name__)
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCmZyb20gdGltZWl0IGltcG9ydCByZXBlYXQKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCgpkZWYgcmVhcnJhbmdlX2xpc3Q0KGlucF9saXN0KToKICAgIHVuaXF1ZXMgPSBzZXQoaW5wX2xpc3QpCiAgICByZXR1cm4gbGlzdChjaGFpbih1bmlxdWVzLCAoQ291bnRlcihpbnBfbGlzdCkgLSBDb3VudGVyKHVuaXF1ZXMpKS5lbGVtZW50cygpKSkKCmRlZiBqdXN0X3NldChpbnBfbGlzdCk6CiAgICB1bmlxdWVzID0gc2V0KGlucF9saXN0KQogICAgCmRlZiBqdXN0X2N0cihpbnBfbGlzdCk6CiAgICBDb3VudGVyKGlucF9saXN0KQogICAgCmRlZiBqdXN0X2N0cjIoaW5wX2xpc3QpOgogICAgQ291bnRlcih1bmlxdWVzKQogICAgCmRlZiBqdXN0X3N1YihpbnBfbGlzdCk6CiAgICBjdHIgLSBzdWJ0cmFjdAoKZGVmIGZpbmlzaChpbnBfbGlzdCk6CiAgICBsaXN0KGNoYWluKHVuaXF1ZXMsIGRpZmYuZWxlbWVudHMoKSkpCgpmdW5jcyA9IHJlYXJyYW5nZV9saXN0NCwganVzdF9zZXQsIGp1c3RfY3RyLCBqdXN0X2N0cjIsIGp1c3Rfc3ViLCBmaW5pc2gKCmEgPSBbcmFuZHJhbmdlKDEwMDAwKSBmb3IgXyBpbiByYW5nZSgzMDAwMCldCnVuaXF1ZXMgPSBzZXQoYSkKY3RyID0gQ291bnRlcihhKQpzdWJ0cmFjdCA9IENvdW50ZXIodW5pcXVlcykKZGlmZiA9IGN0ciAtIHN1YnRyYWN0Cgpmb3IgXyBpbiByYW5nZSgzKToKICAgIHByaW50KCkKICAgIGZvciBmdW5jIGluIGZ1bmNzOgogICAgICAgIHQgPSBtaW4ocmVwZWF0KGxhbWJkYTogZnVuYyhhKSwgbnVtYmVyPTEpKQogICAgICAgIHByaW50KCclNS4yZiBtcyAnICUgKHQgKiAxZTMpLCBmdW5jLl9fbmFtZV9fKQ==