Janela deslizante em Python

Python fornece uma excelente infraestrutura para iteradores, e há casos de uso em que você pode precisar de um iterador em janela, por exemplo, analisadores com lookahead ou lookbehind.

Esta implementação de janela deslizante é otimizada para velocidade (há uma dúzia de implementações que são mais lentas do que isso, pelo menos a melhor solução no Stack Overflow):

def window(iterable, size=2):
i = iter(iterable)
win = []
for e in range(0, size):
win.append(next(i))
yield win
for e in i:
win = win[1:] + [e]
yield win