fork download
  1. from random import shuffle
  2. from timeit import timeit
  3. from collections import defaultdict, Counter
  4.  
  5. def dict1():
  6. d = {}
  7. for num in nums:
  8. if num in d:
  9. d[num] += 1
  10. else:
  11. d[num] = 1
  12.  
  13. def dict2():
  14. d = {}
  15. for num in nums:
  16. d[num] = d.get(num, 0) + 1
  17.  
  18. def dict3():
  19. class MyDict(dict):
  20. def __missing__(self, key):
  21. return 0
  22. d = MyDict()
  23. for num in nums:
  24. d[num] += 1
  25.  
  26. def defaultdict1():
  27. d = defaultdict(int)
  28. for num in nums:
  29. d[num] += 1
  30.  
  31. def Counter1():
  32. d = Counter()
  33. for num in nums:
  34. d[num] += 1
  35.  
  36. def Counter2():
  37. d = Counter(nums)
  38.  
  39. nums = list(range(1000)) * 1000
  40. shuffle(nums)
  41. for _ in range(2):
  42. for func in dict1, dict2, dict3, defaultdict1, Counter1, Counter2:
  43. print('%.3f' % timeit(func, number=2), func.__name__)
  44. print()
Success #stdin #stdout 3.5s 19772KB
stdin
Standard input is empty
stdout
0.177 dict1
0.240 dict2
0.284 dict3
0.130 defaultdict1
0.481 Counter1
0.083 Counter2

0.174 dict1
0.240 dict2
0.283 dict3
0.130 defaultdict1
0.482 Counter1
0.082 Counter2