我有這個foll。列表中的Python:Itertools部分列表python
[1, 2, 3, 4]
是否有蟒蛇itertools功能導致FOLL:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
我有這個foll。列表中的Python:Itertools部分列表python
[1, 2, 3, 4]
是否有蟒蛇itertools功能導致FOLL:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
這是微不足道的,而不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)
再次,這是懶惰的,並與可迭代的工作。
沒有在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]
如果是必須使用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]
你不需要itertools
,只是使用地圖:
>>> l = [1, 2, 3, 4]
>>> for sub_list in map(lambda index: l[:index + 1], range(len(l))):
... print sub_list
這可以寫成一行程序使用列表理解:
>>> [ list[:x+1] for x in range(len(list)) ]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]]
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]