Це дає відповідь на те, що повинен був запитати ОП , тобто провести список зіставлення послідовних елементів (відмінна відповідь 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, цей код такий самий ледачий, як це може бути. Не перевірений.