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))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlciwgZGVmYXVsdGRpY3QKCnggPSBbMSwgMSwgMiwgMywgMSwgM10KCmRlZiB0aW1lc19zb19mYXIoKToKICAgIHJldHVybiBsaXN0KHRpbWVzX3NvX2Zhcl9nZW5lcmF0b3IoeCkpCgpkZWYgdGltZXNfc29fZmFyX2dlbmVyYXRvcihudW1zKToKICAgIGNvdW50ZXIgPSBDb3VudGVyKCkKICAgIGZvciBudW0gaW4gbnVtczoKICAgICAgICBjb3VudGVyW251bV0gKz0gMQogICAgICAgIHlpZWxkIGNvdW50ZXJbbnVtXQoKZGVmIHRpbWVzX3NvX2Zhcl9kKCk6CiAgICByZXR1cm4gbGlzdCh0aW1lc19zb19mYXJfZ2VuZXJhdG9yX2QoeCkpCgpkZWYgdGltZXNfc29fZmFyX2dlbmVyYXRvcl9kKG51bXMpOgogICAgY291bnRlciA9IGRlZmF1bHRkaWN0KGludCkKICAgIGZvciBudW0gaW4gbnVtczoKICAgICAgICBjb3VudGVyW251bV0gKz0gMQogICAgICAgIHlpZWxkIGNvdW50ZXJbbnVtXQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGltcG9ydCB0aW1laXQKICAgIHByaW50KHRpbWVpdC50aW1laXQodGltZXNfc29fZmFyLCBudW1iZXI9MTAwMDAwKSkKICAgIHByaW50KHRpbWVpdC50aW1laXQodGltZXNfc29fZmFyX2QsIG51bWJlcj0xMDAwMDApKQ==