如何从给定列表中选择一些数字,以使它们的总和为特定给定数字?从列表中选择一组数字,并将其累加到给定值
例子:
wanted_num = 10
my_list = [1, 3, 11, 123, 5, 4]
=> [1, 5, 4]
如何从给定列表中选择一些数字,以使它们的总和为特定给定数字?从列表中选择一组数字,并将其累加到给定值
例子:
wanted_num = 10
my_list = [1, 3, 11, 123, 5, 4]
=> [1, 5, 4]
下面的解决方案应该工作:
wanted_num = 10
my_list = [1, 3, 11, 123, 5, 7]
for i in range(0, len(my_list)):
for j in range(0, len(my_list)):
if i + j == wanted_num:
answer = [i, j]
break
print(answer)
此解决方案假定这里只有两个数字加起来wanted_num
。 希望它有帮助。
下面是一个更宽泛的版本,检查的不仅仅是对更多的(基本上,加起来所需目标的任何n元组)
def findSum(target, L, sofar=None):
if sofar is None:
sofar = []
if not target:
print(sofar)
return
if target < 0:
return
for i,num in enumerate(L):
findSum(target-num, L[:i]+L[i+1:], sofar+[num])
输出:
In [34]: findSum(10, [1,3,11,123,5,7])
[3, 7]
[7, 3]
注意它不排除类似集合
这是一种可行的方法:
def find_combinations(list, sum):
if not list:
if sum == 0:
return [[]]
return []
return find_combinations(list[1:], sum) + \
[[list[0]] + tail for tail in
find_combinations(list[1:], sum - list[0])]
对于你的榜样,这将返回:
>>> print find_combinations([1, 3, 11, 123, 5, 4], 10)
[[1, 5, 4]]
请澄清:你想找到2号,其总和为所需的数量,或总计为它的最小尺寸设定?如果有多个和所需数字相加的组合,会发生什么? – arghbleargh 2014-11-22 23:43:48
它可能是多个数字组成的总和。在这种情况下,它只有2 – programmer 2014-11-22 23:46:10