如何在python中创建多个变量的所有可能组合[duplicate]

vkc1a9a2  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(157)
    • 此问题在此处已有答案**:

(17个答案)
四年前关闭了。
我有任意数量的变量,每个变量可以取任意数量的有效值。例如,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})

但是变量的数量也会有所不同。我想应用5个变量(a,b,c,d,e),而不是3个变量。如何在python中使用通用代码来实现这一点

ilmyapht

ilmyapht1#

最简单的方法是itertools.product(),它允许你在一个简单的一行程序中创建你想要的东西:

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,而不是dicts
目前我看不出为什么必须以类似于dict的方式命名元素的确切原因,只要您知道元素存储在那里的顺序(这在itertools.product中是可以预测的)。

相关问题