【问题标题】:how to create all possible combinations of multiple variables in python [duplicate]如何在python中创建多个变量的所有可能组合[重复]
【发布时间】:2018-08-27 07:17:03
【问题描述】:

我有任意数量的变量,每个变量可以采用任意数量的有效值。例如。 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 个变量而不是 3 个变量(a、b、c、d、e)等等。如何在python中有一个通用代码来实现这一点

【问题讨论】:

  • 您可以使用 dict-comprehension:a = ["a1","a2","a3"]; b = ["b1","b2"]; c = ["c1","c2","c3","c4","c5"]; {"a:{}, b:{}, c:{}".format(ai, bi, ci) for ai in a for bi in b for ci in c}

标签: python python-3.x combinations


【解决方案1】:

最简单的方法是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

我目前不明白为什么你必须以类似字典的方式命名你的元素,只要你知道元素存储在那里的顺序(这在itertools.product中是可以预测的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多