Python成语来链接(平化)有限可迭代对象的无限可迭代对象?
时间:2020-03-06 14:35:51 来源:igfitidea点击:
假设我们有一个迭代器(一个无限的迭代器)返回列表(或者有限迭代器),例如一个由
infinite = itertools.cycle([[1,2,3]])
获得一个迭代器(显然是无限的)的一个好Python习惯用法是什么,它将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,依此类推。在上面的示例中,它将返回1,2,3,1 ,2,3,...
。迭代器是无限的,所以itertools.chain(* infinite)
将不起作用。
有关的
- 在python中展平浅表
解决方案
使用生成器:
(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)