【问题标题】:Two simultaneous generator functions, Python两个同时生成器函数,Python
【发布时间】:2013-08-31 19:23:16
【问题描述】:

我有两个功能:

def a():
    while True:
        yield stuff

def b():
    while True:
        yield otherstuff

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

谢谢!

【问题讨论】:

    标签: python python-2.7 generator


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      【解决方案2】:
      for x, y in zip(a(), b()):
      

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

      【讨论】:

      • 我不认为zip(...) 可以与似乎是 OP 意图的无限生成器一起使用。如果我错了,请纠正我。 :)
      • @SukritKalra:嗯。我实际上并没有阅读给定的生成器;我可能应该有。它们确实是无限的,所以 izip 或 future-zip 可能是合适的。
      【解决方案3】:

      你可以从itertools使用izip

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

      现在你有了元组的生成器,第一个来自 a(),第二个来自 b()

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 2019-12-04
        • 2020-09-07
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多