2017-01-13 51 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,這樣的事情應該工作(PY 3):

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

一號線解決方案,使用partialislice

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]