Isso responde ao que o OP deveria ter solicitado , ou seja, percorre uma lista comparando elementos consecutivos (excelente resposta do SilentGhost ), mas generalizada para qualquer grupo ( n-grama ): 2, 3, ... n
:
zip(*(l[start:] for start in range(0, n)))
Exemplos:
l = range(0, 4) # [0, 1, 2, 3]
list(zip(*(l[start:] for start in range(0, 2)))) # == [(0, 1), (1, 2), (2, 3)]
list(zip(*(l[start:] for start in range(0, 3)))) # == [(0, 1, 2), (1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 4)))) # == [(0, 1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 5)))) # == []
Explicações:
l[start:]
gera uma lista / gerador a partir do índice start
*list
ou *generator
: passa todos os elementos para a função delimitadora zip
como se estivesse gravadazip(elem1, elem2, ...)
Nota:
AFAIK, esse código é o mais preguiçoso possível. Não testado.