from collections import Counter, defaultdict
x = [1, 1, 2, 3, 1, 3]
def times_so_far():
return list(times_so_far_generator(x))
def times_so_far_generator(nums):
counter = Counter()
for num in nums:
counter[num] += 1
yield counter[num]
def times_so_far_d():
return list(times_so_far_generator_d(x))
def times_so_far_generator_d(nums):
counter = defaultdict(int)
for num in nums:
counter[num] += 1
yield counter[num]
if __name__ == '__main__':
import timeit
print(timeit.timeit(times_so_far, number=100000))
print(timeit.timeit(times_so_far_d, number=100000))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlciwgZGVmYXVsdGRpY3QKIAp4ID0gWzEsIDEsIDIsIDMsIDEsIDNdCiAKZGVmIHRpbWVzX3NvX2ZhcigpOgogICAgcmV0dXJuIGxpc3QodGltZXNfc29fZmFyX2dlbmVyYXRvcih4KSkKIApkZWYgdGltZXNfc29fZmFyX2dlbmVyYXRvcihudW1zKToKICAgIGNvdW50ZXIgPSBDb3VudGVyKCkKICAgIGZvciBudW0gaW4gbnVtczoKICAgICAgICBjb3VudGVyW251bV0gKz0gMQogICAgICAgIHlpZWxkIGNvdW50ZXJbbnVtXQogCmRlZiB0aW1lc19zb19mYXJfZCgpOgogICAgcmV0dXJuIGxpc3QodGltZXNfc29fZmFyX2dlbmVyYXRvcl9kKHgpKQogCmRlZiB0aW1lc19zb19mYXJfZ2VuZXJhdG9yX2QobnVtcyk6CiAgICBjb3VudGVyID0gZGVmYXVsdGRpY3QoaW50KQogICAgZm9yIG51bSBpbiBudW1zOgogICAgICAgIGNvdW50ZXJbbnVtXSArPSAxCiAgICAgICAgeWllbGQgY291bnRlcltudW1dCiAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCB0aW1laXQKICAgIHByaW50KHRpbWVpdC50aW1laXQodGltZXNfc29fZmFyLCBudW1iZXI9MTAwMDAwKSkKICAgIHByaW50KHRpbWVpdC50aW1laXQodGltZXNfc29fZmFyX2QsIG51bWJlcj0xMDAwMDApKQ==