Форум сайта python.su
добавил твой к временным тестам, заменив генератор на список
#!/usr/bin/env python3 class NotAListError(TypeError): pass def convert_any_order(lst): if type(lst) != list: raise NotAListError('the argument should be a list') lst.sort() lst.append(None) NOTSEQ, SEQ = 0, 1 prev_state = NOTSEQ itr = iter(lst) item = next(itr) out = [] for nextitem in itr: state = SEQ if (nextitem is not None and nextitem - item == 1) else NOTSEQ if state == SEQ: if prev_state == NOTSEQ: seq_start = item elif state == NOTSEQ: if prev_state == SEQ: out.append(str(seq_start) + ':' + str(item)) elif prev_state == NOTSEQ: out.append(str(item)) prev_state, item = state, nextitem return out
[guest@localhost timecmp]$ ./timecmp.py
[0.6980701190004766, 0.6938450420002482, 0.6918122200004291]
[0.6967832520003867, 0.7003876839999066, 0.7101401099998839]
[0.7023664429998462, 0.703262595000524, 0.7029014090003329]
[0.6880042000002504, 0.6855810509996445, 0.6881532290008181]
[0.9738981830005287, 0.9772623899998507, 0.9726100779998887]
[guest@localhost timecmp]$
Офлайн
это я думаю из-за лишней проверки
а как ты таймишь? хочу по-оптимизировать
Офлайн
#!/usr/bin/env python3 import timeit import onegrp1, onegrp2, onegrp3, onegrp4, onegrp5 def f1(): onegrp1.convert_any_order([1, 2, 3, 1, 2, 3, -1, -2, -3] * 10) def f2(): onegrp2.convert_any_order([1, 2, 3, 1, 2, 3, -1, -2, -3] * 10) def f3(): onegrp3.convert_any_order([1, 2, 3, 1, 2, 3, -1, -2, -3] * 10) def f4(): onegrp4.convert_any_order([1, 2, 3, 1, 2, 3, -1, -2, -3] * 10) def f5(): onegrp5.convert_any_order([1, 2, 3, 1, 2, 3, -1, -2, -3] * 10) t1 = timeit.Timer('f1()', 'from __main__ import f1') t2 = timeit.Timer('f2()', 'from __main__ import f2') t3 = timeit.Timer('f3()', 'from __main__ import f3') t4 = timeit.Timer('f4()', 'from __main__ import f4') t5 = timeit.Timer('f5()', 'from __main__ import f5') for t in t1, t2, t3, t4, t5: print(t.repeat(3, 10000))
Офлайн