fork download
  1. from collections import Counter
  2. from random import randrange
  3. from timeit import repeat
  4. from itertools import chain
  5.  
  6. def rearrange_list4(inp_list):
  7. uniques = set(inp_list)
  8. return list(chain(uniques, (Counter(inp_list) - Counter(uniques)).elements()))
  9.  
  10. def just_set(inp_list):
  11. uniques = set(inp_list)
  12.  
  13. def just_ctr(inp_list):
  14. Counter(inp_list)
  15.  
  16. def just_ctr2(inp_list):
  17. Counter(uniques)
  18.  
  19. def just_sub(inp_list):
  20. ctr - subtract
  21.  
  22. def finish(inp_list):
  23. list(chain(uniques, diff.elements()))
  24.  
  25. funcs = rearrange_list4, just_set, just_ctr, just_ctr2, just_sub, finish
  26.  
  27. a = [randrange(10000) for _ in range(30000)]
  28. uniques = set(a)
  29. ctr = Counter(a)
  30. subtract = Counter(uniques)
  31. diff = ctr - subtract
  32.  
  33. for _ in range(3):
  34. print()
  35. for func in funcs:
  36. t = min(repeat(lambda: func(a), number=1))
  37. print('%5.2f ms ' % (t * 1e3), func.__name__)
Success #stdin #stdout 0.31s 15920KB
stdin
Standard input is empty
stdout
 8.35 ms  rearrange_list4
 0.94 ms  just_set
 2.14 ms  just_ctr
 0.45 ms  just_ctr2
 2.97 ms  just_sub
 1.31 ms  finish

 8.23 ms  rearrange_list4
 0.95 ms  just_set
 2.14 ms  just_ctr
 0.45 ms  just_ctr2
 2.98 ms  just_sub
 1.31 ms  finish

 8.37 ms  rearrange_list4
 0.95 ms  just_set
 2.15 ms  just_ctr
 0.45 ms  just_ctr2
 2.98 ms  just_sub
 1.31 ms  finish