itertools.chain如何与生成器函数一起使用?

时间:2015-05-12 14:39:23

标签: python

在接下来的内容中,我正在尝试但未能获得一个平面列表:

>>> from itertools import chain
>>> 
>>> def foo():
...     for i in range(3):
...         yield range(5)
... 
>>> 
>>> chain(foo)
<itertools.chain object at 0x7fce499934d0>
>>> 
>>> list(chain(foo()))
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> 
>>> list(chain([foo()]))
[<generator object foo at 0x7fce49994aa0>]
>>> 
>>> list(chain(list(foo())))
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

我做错了什么?如何使用itertools.chain获取平面列表[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

1 个答案:

答案 0 :(得分:5)

即将结束,您可以使用chain.from_iterable

中的itertools
>>> list(itertools.chain.from_iterable(foo()))
[0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]