我有这个人。 python中的列表:
[1, 2, 3, 4]
是否有python itertools函数导致foll:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
答案 0 :(得分:6)
如果没有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)
同样,它是懒惰的,适用于任何可迭代的。
答案 1 :(得分: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 :(得分: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]
答案 3 :(得分:2)
这可以使用列表理解编写为单行:
>>> [ list[:x+1] for x in range(len(list)) ]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]]
答案 4 :(得分:1)
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]
答案 5 :(得分:0)
您不需要itertools
,只需使用地图:
>>> l = [1, 2, 3, 4]
>>> for sub_list in map(lambda index: l[:index + 1], range(len(l))):
... print sub_list