从列表中选择一组加起来给定值的数字

时间:2014-11-22 23:37:08

标签: python list combinations

如何从给定列表中选择一些数字,使其总和为某个给定数字?

示例:

wanted_num = 10
my_list = [1, 3, 11, 123, 5, 4]

=> [1, 5, 4]

3 个答案:

答案 0 :(得分:2)

这是一种可行的方法:

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]]

答案 1 :(得分:1)

这是一个更通用的版本,它检查的不仅仅是对(基本上,任何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]

请注意,它不排除类似的集合

答案 2 :(得分:-2)

以下解决方案应该有效:

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。 希望它有所帮助。