考虑一个元组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
但这很难看,而且我需要一个通用的解决方案。
答案 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)。