【问题标题】:Nested generator functions in pythonpython中的嵌套生成器函数
【发布时间】:2011-02-03 20:00:27
【问题描述】:

考虑一个元组 v = (a,b,c) 和一个生成器函数 generate(x),它从元组接收一个项目并为每个项目生成多个选项。

在元组中的每个项目上生成generate(x)结果的所有可能组合的pythonic方法是什么?

我可以这样做:

v = (a,b,c)
for d in generate(v[0]):
    for e in generate(v[1]):
        for f in generate(v[2]):
            print d,e,f

但这很丑,而且我需要一个通用的解决方案。

【问题讨论】:

    标签: python generator list-comprehension


    【解决方案1】:

    Python 2.6 的函数 itertools.product() 可以满足您的需求:

    import itertools
    v = (a, b, c)
    for d, e, f in itertools.product(*(generate(x) for x in v)):
      print d, e, f
    

    来自文档:

    输入迭代的笛卡尔积。

    等价于 a 中的嵌套 for 循环 生成器表达式。例如, product(A, B) 返回与 ((x,y) for x in A for y in B)。

    【讨论】:

    • 看起来很有帮助,我将如何迭代结果?
    • @Yuval: for i in product(*(generate(x) for x in v)): do_whatever_you_want(i)
    • @Yuval:它返回一个列出所有组合的生成器。我已经更新了我的答案以展示如何迭代结果。
    猜你喜欢
    • 2011-09-19
    • 2017-02-16
    • 1970-01-01
    • 2015-12-27
    • 2018-06-04
    • 2012-04-25
    • 2012-06-27
    • 2018-10-06
    • 2010-12-09
    相关资源
    最近更新 更多