如何在Python中根据变量和值生成所有可能的组合

时间:2019-08-22 12:11:26

标签: python

摘要: 我大约有50个变量,它们都有一个值。我想获得所有可能的变量组合的最大值。

例如:我有变量“葡萄:0.1欧元”,“苹果:1欧元”,“香蕉:2.5欧元”,“草莓:4欧元”,“橙色:5欧元”等我想拥有一个5欧元时可以做出的所有可能组合。而且,每个变量只能被选择一次(例如,不是5 x苹果),并且可以选择的变量数量最大。

以上示例是我的问题的简化。

背景: 我还没有尝试过任何东西。我想我必须将变量作为字典读入。但是对于其余部分,我不知道如何在Python中解决此问题。

代码: 尚无可用

预期输出: 输出应该是变量的所有可能组合,这些变量应匹配包含最大'x'变量并代表最大'x'值的条件,并且每个变量的选择不得超过一次。

2 个答案:

答案 0 :(得分:0)

尝试此方法以开始:

import itertools

x=[0.1, 1, 2.5, 4, 5]
N = 5
res = []
for i in range(len(x)):
    for el in itertools.combinations(x, i+1):
        if(sum(el)<=N and N-sum(el) < min([el_sub for el_sub in x if el_sub not in el] or [N])):
            res.append(el)
            print(el)

结果可在“ res”中找到。如果要限制元素的数量,请使用第一个for循环(以及相应的if语句)。

答案 1 :(得分:0)

我自己也找到了技术解决方案。但我要说的是,这需要很多处理能力。在我的情况下,有48个变量,我希望将所有可能的变量与20个变量组合。我相信大约有9.000.000.000种可能的组合。因此,Python无法正确处理此问题。无论如何,我的代码如下(用于26种水果及其12种的所有组合):

from itertools import combinations

fruits = [
{'A':1.5},
{'B':1.5},
{'C':0.75},
{'D':1.5},
{'E':2.5},
{'F':3.5},
{'G':1},
{'H':0.5},
{'I':2.5},
{'J':1},
{'K':0.75},
{'L':3},
{'M':0.5},
{'N':0.75},
{'O':1},
{'P':1},
{'Q':1.5},
{'R':2},
{'S':3.5},
{'T':3},
{'U':0.75},
{'V':2},
{'W':2},
{'X':1.5},
{'Y':4},
{'Z':1.5}
]

combis = list(combinations(fruits,12))

for combi in combis:
    total = 0
    for fruit in combi:
        fruit = fruit.values()
        string = (list(value))
        integer = (string[0])
        total = total + integer
    if total == 23.5:
        print(list(combi[0].keys())[0]), print(list(combi[1].keys())[0]), print(list(combi[2].keys())[0]), 
        print(list(combi[3].keys())[0]), print(list(combi[4].keys())[0]), print(list(combi[5].keys())[0]),
        print(list(combi[6].keys())[0]), print(list(combi[7].keys())[0]), print(list(combi[8].keys())[0]), 
        print(list(combi[9].keys())[0]), print(list(combi[10].keys())[0]), print(list(combi[11].keys())[0]), 
        print(som), print('_______________')
    else:
        pass