python中的嵌套生成器函数

时间:2010-04-02 18:26:48

标签: python generator list-comprehension

考虑一个元组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

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

1 个答案:

答案 0 :(得分:8)

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循环   发电机表达。例如,   产品(A,B)返回相同的   ((x,y)表示B中的x表示的x)。