Используйте список понимание и нарезка:
>>> lis = [10,4,18,2,6,19,24,1,20]
>>> n = 3
>>> [lis[i:i+n] for i in xrange(len(lis)-n+1)]
[[10, 4, 18], [4, 18, 2], [18, 2, 6], [2, 6, 19], [6, 19, 24], [19, 24, 1], [24, 1, 20]]
>>> n = 4
>>> [lis[i:i+n] for i in xrange(len(lis)-n+1)]
[[10, 4, 18, 2], [4, 18, 2, 6], [18, 2, 6, 19], [2, 6, 19, 24], [6, 19, 24, 1], [19, 24, 1, 20]]
Для большего списка подход, основанный на zip
на самом деле медленнее:
In [27]: n = 100
In [28]: lis = [10,4,18,2,6,19,24,1,20]*10000
In [30]: %timeit zip(*[lis[i:] for i in xrange(n)])
1 loops, best of 3: 593 ms per loop
In [31]: %timeit [lis[i:i+n] for i in xrange(len(lis)-n+1)]
10 loops, best of 3: 114 ms per loop
нет, что будет получить '[10,4,18], [2,6,19], [24,1,20]' –
@alko - Я проверил эту тему уже. Но проблема была другая – PythonEnthusiast