I need a rolling window (aka sliding window) iterable over a sequence/iterator/generator. Default Python iteration can be considered a special case, where the window length
Let's make it lazy!
from itertools import islice, tee def window(iterable, size): iterators = tee(iterable, size) iterators = [islice(iterator, i, None) for i, iterator in enumerate(iterators)] yield from zip(*iterators) list(window(range(5), 3)) # [(0, 1, 2), (1, 2, 3), (2, 3, 4)]