一起循环多个发电机

时间:2019-02-13 14:56:26

标签: python python-3.x loops generator

我需要同时获取每个生成器的结果,但是生成器的数量可以是1到10之间的任何值。

我的问题可能与此问题有关:Loop over two generator together

是否可以针对列表中任意数量的生成器将其概括化?诸如此类的东西(不起作用)

generators = [gen1, gen2, gen3, ....]
for *data in *generators:
    #do something, e.g. average data along axis and write out

1 个答案:

答案 0 :(得分:2)

您想要zip的IIUC。这是一个求和的简单示例:

generators = [(1,2), (3,4), (5,6)]
[sum(i) for i in zip(*generators)]

# [9, 12]

或者@alexis建议的itertools.zip_longest,如果生成器的长度可能不同,并且您想要迭代直到消耗了最长的生成器:

generators = [(1,2), (3,4), (5,6,0)]
[sum(i) for i in zip_longest(*generators, fillvalue=0)]
# [9, 12, 0]