考虑一个元组 v = (a,b,c) 以及一个生成器函数 generate(x) 它从元组接收一个项并为每个项生成多个选项。
v = (a,b,c)
generate(x)
什么是pythonic方法来产生一组所有可能的组合结果 生成(x) 在元组中的每个项目上?
生成(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
但那太难看了,而且我需要一个通用的解决方案。
Python2.6具有 itertools.product() 这就是你想要的:
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,B)返回与 (x,y)代表x在a代表y在b)。
输入可数的笛卡尔积。
相当于 生成器表达式。例如, 产品(A,B)返回与 (x,y)代表x在a代表y在b)。