python中的嵌套生成器函数

Yuv*_*dam 2 python list-comprehension generator

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

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

我能做到这一点:

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
Run Code Online (Sandbox Code Playgroud)

但那只是丑陋的,而且我需要一个通用的解决方案.

Aym*_*ieh 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
Run Code Online (Sandbox Code Playgroud)

来自文档:

输入迭代的笛卡儿乘积.

等效于生成器表达式中的嵌套for循环.例如,乘积(A,B)与A中的x的((x,y)相同,对于B中的y,返回相同的值).