从 python 中的列表中获取可能总和的最有效方法

Most efficient method of getting possible sum from list in python

类似于背包问题。 如果我有

list = [5,7,9,12,6]
targetValue = 15

因为6+9 = 15,什么是最有效的得到

[6,9]

python是否有解决此类问题的内置方法?

这是一个快速解决方案。但是请注意,如果您的列表包含重复值,您可能会得到重复的解决方案。

from itertools import *

s = [5, 7, 9, 12, 6]
m = 15

c = chain(*[combinations(s, i) for i in range(len(s)+1)])
r = [n for n in c if sum(n) == m]

print r

这是一个更复杂的版本,可以处理列表中的重复值:

from itertools import *
from collections import *

s = [5, 7, 9, 12, 6]
m = 15

c = Counter(s)
u = list(c)
ul = len(u)
t = [c[x] for x in u]
p = product(*[xrange(i+1) for i in t])
e = ([a for b in [[u[i]] * x[i] for i in range(ul)] for a in b] for x in p)
r = [n for n in e if sum(n) == m]

print r