itertools
имеет тенденцию быть самым быстрым решением, когда оно непосредственно применимо.
Очевидно, что единственный способ проверить - это выполнить эталонный тест - например, сохранить в aaa.py
import itertools
def doit1(iterable, n, do_something=lambda x: None):
count = 0
for item in iterable:
do_something(item)
count += 1
if count >= n: break
def doit2(iterable, n, do_something=lambda x: None):
for item in itertools.islice(iterable, n):
do_something(item)
pair_generator = lambda iterable: itertools.izip(*[iter(iterable)]*2)
def dd1(itrbl=range(44)): doit1(itrbl, 23)
def dd2(itrbl=range(44)): doit2(itrbl, 23)
и посмотри ...:
$ python -mtimeit -s'import aaa' 'aaa.dd1()'
100000 loops, best of 3: 8.82 usec per loop
$ python -mtimeit -s'import aaa' 'aaa.dd2()'
100000 loops, best of 3: 6.33 usec per loop
так ясно, что itertools быстрее здесь - сравните с вашими данными для проверки.
Кстати, я нахожу timeit
НАМНОГО более пригодным для использования из командной строки, так что я всегда использую его - тогда он запускает правильный "порядок величины" циклов для скоростей, которые вы специально пытаетесь мера, будь то 10, 100, 1000 и т. д. - здесь, чтобы различить микросекунды и половину разницы, сто тысяч петель примерно правильные.