from collections import deque from itertools import islice, repeat def consume_deque(n, items): deque(islice(items, n), maxlen=0) def consume_forloop(n, items): for _ in islice(items, n): pass def consume_islice(n, items): if n == 0: return next(islice(items, n-1, None), None) def check(fs): for consume in fs: items = iter(range(10)) consume(3, items) rest = list(items) assert rest == range(3, 10), consume.__name__ if __name__ == "__main__": fs = consume_deque, consume_forloop, consume_islice check(fs) items = repeat(None) from timeit import Timer for consume in fs: print consume.__name__ for n in (10, 100, 1000): print "%6d:" % n, print Timer("consume(%s, items)" % n, "from __main__ import consume, items").timeit() print