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)