从 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
类似于背包问题。 如果我有
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