假设我们有一个迭代器(一个无限的)返回列表(或有限迭代器),例如返回的一个
infinite = itertools.cycle([[1,2,3]])
什么是一个很好的Python习惯用来获得一个迭代器(显然是无限的),它将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,等等.在上面的例子中它将返回1,2,3,1,2,3,...
.迭代器是无限的,所以itertools.chain(*infinite)
不起作用.
在python中展平浅表
Torsten Mare.. 44
从Python 2.6开始,您可以使用itertools.chain.from_iterable
:
itertools.chain.from_iterable(iterables)
您也可以使用嵌套的生成器理解来执行此操作:
def flatten(iterables): return (elem for iterable in iterables for elem in iterable)
Thomas Woute.. 10
使用发电机:
(item for it in infinite for item in it)
*构造解压缩到一个元组以传递参数,因此无法使用它.
从Python 2.6开始,您可以使用itertools.chain.from_iterable
:
itertools.chain.from_iterable(iterables)
您也可以使用嵌套的生成器理解来执行此操作:
def flatten(iterables): return (elem for iterable in iterables for elem in iterable)
使用发电机:
(item for it in infinite for item in it)
*构造解压缩到一个元组以传递参数,因此无法使用它.