Questo risponde a ciò che l'OP avrebbe dovuto chiedere , ovvero attraversare un elenco confrontando elementi consecutivi (eccellente risposta SilentGhost ), ma generalizzato per qualsiasi gruppo ( n-grammo ): 2, 3, ... n:
zip(*(l[start:] for start in range(0, n)))
Esempi:
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)))) # == []
spiegazioni:
l[start:] genera un elenco / generatore a partire dall'indice start
*listoppure *generator: passa tutti gli elementi alla funzione che racchiude zipcome se fosse stata scrittazip(elem1, elem2, ...)
Nota:
AFAIK, questo codice è pigro come può essere. Non testato.