1

我有两个功能:

def a():
    while True:
        yield stuff

def b():
    while True:
        yield otherstuff

我想要一个循环,它从存储在 a for a() 和 b for b() 中的每个函数中收集一个产量;例如。如果我嵌套调用它们的 for 循环,它会在每次第一个循环循环时重新启动第二个生成器。我可以帮忙吗?

谢谢!

4

3 回答 3

6

您可以使用itertools.izip(...)将这些值压缩在一起。

>>> def a():
        for i in xrange(10):
            yield i


>>> def b():
        for i in xrange(10, 20):
            yield i


>>> from itertools import izip
>>> for i, j in izip(a(), b()):
        print i, j


0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
于 2013-08-31T19:26:13.773 回答
3
for x, y in zip(a(), b()):

这就像同时循环任意两个序列。(在迭代之前,您可能希望使用itertools.izipfrom future_builtins import zip避免将所有项目收集到一个大列表中。)

于 2013-08-31T19:26:22.617 回答
1

您可以使用itertools中的izip

from itertools import izip
z = izip(a(),b())

现在你有了元组生成器,a() 中的第一项和 b() 中的第二项

于 2013-08-31T19:26:34.213 回答