Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from timeit import timeit
- from collections import Counter
- import types
- import random
- def setup_data(n):
- digits = "0123456789"
- return dict(text = ''.join(random.choice(digits) for i in range(n)))
- def f_counter(text):
- c = Counter()
- for i in range(len(text)-2):
- ss = text[i:i+3]
- c.update([ss])
- return (i for i in c.items() if i[1] > 1)
- def f_counter2(text):
- c = Counter()
- for i in range(len(text)-2):
- ss = text[i:i+3]
- c[ss] += 1
- return (i for i in c.items() if i[1] > 1)
- def f_counter3(text):
- c = Counter(text[i:i+3] for i in range(len(text) - 2))
- return (i for i in c.items() if i[1] > 1)
- def f_dict(text):
- d = {}
- for i in range(len(text)-2):
- ss = text[i:i+3]
- if ss not in d:
- d[ss] = 0
- d[ss] += 1
- return ((i, d[i]) for i in d if d[i] > 1)
- def f_array(text):
- a = [[[0 for _ in range(10)] for _ in range(10)] for _ in range(10)]
- for n in range(len(text)-2):
- i, j, k = (int(ss) for ss in text[n:n+3])
- a[i][j][k] += 1
- for i, b in enumerate(a):
- for j, c in enumerate(b):
- for k, d in enumerate(c):
- if d > 1: yield (f'{i}{j}{k}', d)
- for n in (1E1, 1E3, 1E5):
- n = int(n)
- data = setup_data(n)
- print(f'n = {n}')
- results = {}
- for name, func in list(globals().items()):
- if not name.startswith('f_') or not isinstance(func, types.FunctionType):
- continue
- print("{:16s}{:16.8f} ms".format(name[2:], timeit(
- 'results[name] = list(f(**data))', globals={'f':func, 'data':data, 'results':results, 'name':name}, number=10)*100))
- for r in results:
- print('{:10}: {}'.format(r, sorted(results[r])[:5]))
- # n = 10
- # counter 0.06956750 ms
- # counter2 0.02106030 ms
- # counter3 0.03124950 ms
- # dict 0.00937660 ms
- # array 0.27001170 ms
- # f_counter : []
- # f_counter2: []
- # f_counter3: []
- # f_dict : []
- # f_array : []
- # n = 1000
- # counter 5.18519850 ms
- # counter2 1.51690750 ms
- # counter3 0.57832220 ms
- # dict 0.66203990 ms
- # array 2.86603400 ms
- # f_counter : [('002', 2), ('006', 3), ('012', 2), ('014', 2), ('017', 2)]
- # f_counter2: [('002', 2), ('006', 3), ('012', 2), ('014', 2), ('017', 2)]
- # f_counter3: [('002', 2), ('006', 3), ('012', 2), ('014', 2), ('017', 2)]
- # f_dict : [('002', 2), ('006', 3), ('012', 2), ('014', 2), ('017', 2)]
- # f_array : [('002', 2), ('006', 3), ('012', 2), ('014', 2), ('017', 2)]
- # n = 100000
- # counter 516.46002940 ms
- # counter2 78.18013590 ms
- # counter3 42.89571540 ms
- # dict 46.40053570 ms
- # array 241.30035320 ms
- # f_counter : [('000', 97), ('001', 116), ('002', 103), ('003', 102), ('004', 94)]
- # f_counter2: [('000', 97), ('001', 116), ('002', 103), ('003', 102), ('004', 94)]
- # f_counter3: [('000', 97), ('001', 116), ('002', 103), ('003', 102), ('004', 94)]
- # f_dict : [('000', 97), ('001', 116), ('002', 103), ('003', 102), ('004', 94)]
- # f_array : [('000', 97), ('001', 116), ('002', 103), ('003', 102), ('004', 94)]
Advertisement
Add Comment
Please, Sign In to add comment