如何在Python中join两个生成器?

我想更改下面的代码

for directory, dirs, files in os.walk(directory_1): do_something() for directory, dirs, files in os.walk(directory_2): do_something() 

到这个代码:

 for directory, dirs, files in os.walk(directory_1) + os.walk(directory_2): do_something() 

我得到的错误:

不支持的操作数types为+:'generator'和'generator'

我的问题是,如何在Python中join两个生成器?

非常感谢你!

我认为itertools.chain()应该这样做。

代码示例:

 from itertools import chain def generator1(): for item in 'abcdef': yield item def generator2(): for item in '123456': yield item generator3 = chain(generator1(), generator2()) for item in generator3: print item 

通过itertools.chain.from_iterable,你可以做如下的事情:

 def genny(start): for x in range(start, start+3): yield x y = [1, 2] ab = [o for o in itertools.chain.from_iterable(genny(x) for x in y)] print(ab) 

简单的例子:

 from itertools import chain x = iter([1,2,3]) #Create Generator Object (listiterator) y = iter([3,4,5]) #another one result = chain(x, y) #Chained x and y 

如果你想保持生成器分离,但仍然可以在同一时间迭代它们,你可以使用zip():

注意:迭代停在两个发生器中较短的一个上

例如:

 for (root1, dir1, files1), (root2, dir2, files2) in zip(os.walk(path1), os.walk(path2)): for file in files1: #do something with first list of files for file in files2: #do something with second list of files 

让我们说,我们必须发电机(gen1和gen 2),我们要执行一些额外的计算,需要两者的结果。 我们可以通过map方法返回这个函数/计算的结果,然后返回一个我们可以循环的生成器。

在这种情况下,函数/计算需要通过lambda函数来实现。 棘手的部分是我们的目标是在地图和lambda函数中做什么。

build议解决scheme的一般forms:

 def function(gen1,gen2): for item in map(lambda x, y: do_somethin(x,y), gen1, gen2): yield item