我有任意数量的变量,每个变量可以取任意数量的有效值。例如。 a-(a1,a2,a3),b-(b1,b2),c-(c1,c2,c3,c4,c5)。现在我想要下面的字典列表
[
{a:a1,b:b1,c:c1},
{a:a1,b:b1,c:c2},
{a:a1,b:b1,c:c3},
.
.
.
{a:a3,b:b2,c:c3}
]
在上述情况下,总共3 * 2 * 5 = 30种组合。如何在python中创建它们。
对于每个变量,我可能会有三个for
循环,如下所示
result_list = list()
for a_val in [a1,a2,a3]:
for b_val in [b1,b2]:
for c_val in [c1,c2,c3,c4,c5]:
result_list.append({a:a_val,b:b_val,c:c_val})
但是变量的数量也有所不同。而不是3个变量,我想同时应用5个变量(a,b,c,d,e),依此类推。如何使用通用代码在python中实现
答案 0 :(得分:3)
最简单的方法是[itertools.product()][1]
。
它使您可以用简单的一线式创建想要的东西:
import itertools
a = [1,2,3]
b = [4,5]
c = [-1]
# result contains all possible combinations.
combinations = list(itertools.product(a,b,c))
请注意,生成的combinations
变量本身是list
(可以转换为set
),并且不同的元素是tuples
,而不是{{1} }。
我目前尚不清楚为什么您必须以类似dict的方式命名元素的确切原因,只要您知道元素在此处的存储顺序即可({{1}中可预测