Это ответ на то, что OP должен был задать , то есть пройти по списку, сравнивая последовательные элементы (превосходный SilentGhost ответ), но обобщенный для любой группы ( n-грамм ): 2, 3, ... n
:
zip(*(l[start:] for start in range(0, n)))
Примеры:
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)))) # == []
Пояснения:
l[start:]
генерирует список / генератор, начиная с индекса start
*list
или *generator
: передает все элементы функции включения zip
, как если бы она была записана zip(elem1, elem2, ...)
Примечание:
AFAIK, этот код настолько ленив, насколько это возможно. Не проверено.