2017-01-13 2 views

ответ

5

Это тривиальное без itertools:

def fall(it): 
    ls = [] 
    for x in it: 
     ls.append(x) 
     yield ls 

for x in fall(xrange(20)): 
    print x 

Обратите внимание, что это работает с любой итерацией, а не только список.

Если вы все еще хотите itertools, что-то, как это должно работать (PY3):

for x in itertools.accumulate(map(lambda x: [x], it)): 
    print(x) 

Опять же, это ленивая и работает с любой итерацией.

3

Существует нет ничего в itertools, что я могу думать, но это должно работать:

def incremental(L): 
    for i in range(1, len(L)+1): 
     yield L[:i] 

Выход:

In [53]: print(*incremental([1, 2, 3, 4]), sep='\n') 
[1] 
[1, 2] 
[1, 2, 3] 
[1, 2, 3, 4] 
2

Если необходимо использовать itertools, вы может использовать itertools.islice как:

from itertools import islice 
my_list = [1, 2, 3, 4] 

for i in range(1, len(my_list)+1): 
    print list(islice(my_list, i)) 

Однако здесь абсолютно нет необходимости использовать itertools. Вы можете добиться этого с помощью простого списка нарезки как:

for i in range(len(my_list)): 
    print my_list[:i+1] 

Оба вышеуказанных решений распечатывают результат, как:

[1] 
[1, 2] 
[1, 2, 3] 
[1, 2, 3, 4] 
0

Вам не нужно itertools, просто использовать карту:

>>> l = [1, 2, 3, 4] 
>>> for sub_list in map(lambda index: l[:index + 1], range(len(l))): 
...  print sub_list 
2

Это можно записать в виде одного вкладыша, используя список понимания:

>>> [ list[:x+1] for x in range(len(list)) ] 
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]] 
1

Одно из решений линии, используя partial и islice,

from itertools import islice 
from functools import partial 
my_list = [1, 2, 3, 4] 

[list(l) for l in map(partial(islice, my_list), range(1,len(my_list)+1))] 

вы получите,

[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]] 

другими словами,

from itertools import islice 
from functools import partial 
my_list = [1, 2, 3, 4] 
p = partial(islice, my_list) 
for i in range(1,5): 
    print(list(p(i))) 

вы получите,

[1] 
[1, 2] 
[1, 2, 3] 
[1, 2, 3, 4] 
Смежные вопросы