Esto responde a lo que el OP debería haber preguntado , es decir, recorrer una lista que compara elementos consecutivos (excelente respuesta de SilentGhost ), pero generalizada para cualquier grupo ( n-gramo ): 2, 3, ... n:
zip(*(l[start:] for start in range(0, n)))
Ejemplos:
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)))) # == []
Explicaciones:
l[start:] genera una lista / generador a partir del índice start
*listo *generator: pasa todos los elementos a la función de cierre zipcomo si se hubiera escritozip(elem1, elem2, ...)
Nota:
AFAIK, este código es tan vago como puede ser. No probado.