如何在Python中合并来自两个生成器的元组

0 投票
1 回答
797 浏览
提问于 2025-04-18 13:37

我想在一个循环里同时使用两个生成器,类似这样:

for a,b,c,d,e,f in f1(arg),f2(arg):
    print a,b,c,d,e,f

这里的a、b、c、d和e是从f1里来的,而f是从f2里来的。我需要用到yield这个操作符,因为空间有限。

不过,上面的代码并不奏效。因为某种原因,它会一直从f1里取值(六个变量都取)直到f1用完,然后才开始从f2里取值。

请告诉我这是否可行,如果不可行,有没有其他解决办法。谢谢!

1 个回答

8

你可以使用 zip 函数(如果你用的是 Python 2,就用 itertools.izip)来进行序列解包:

def f1(arg):
    for i in range(10):
        yield 1, 2, 3, 4, 5

def f2(arg):
    for i in range(10):
        yield 6

arg = 1

for (a, b, c, d, e), f in zip(f1(arg), f2(arg)):
    print(a, b, c, d, e, f)

撰写回答