有没有办法从一个整数列表中获取一个新的整数列表,这些列表加起来等于某个值?

Is there a way to get a new list of ints from a list of ints, that add up to a certain value?

我有一个整数列表,它们是随机排序的并且可能会重复:mylist = [5,4,2,4,5,6,7,3,8,3] 和某个值(例如:value=35

现在我想从 mylist 中得到一个整数列表,我们将其命名为 sumlist,其中包括加起来等于 [=15= 的所有可能的数字选项].

所以我什么时候会做:

sum=0
for i in  sumlist[0]:
   sum+=i

sum == value 会 return True.

Itertools.combinations 很容易做到这一点。当您为它提供一个列表和一个长度时,它会给出该长度的所有可能组合,并且与排列不同,它会删除重复项。为确保每个选项都尝试过,必须尝试每个长度(从 0 到完整字符串),如下所示:

import itertools
def SumList(MyList,Value):
    for Length in range(1,len(MyList)):          
        for ListOfVals in itertools.combinations(MyList,Length): 
            Total=0
            for num in ListOfVals:
                Total+=num
            if Total==Value:
                
                return(ListOfVals)
                
mylist=[5,4,2,4,5,6,7,3,8,3]
value=35
print(SumList(mylist,value))



>>[5,4,5,6,7,8]

作为一个快速的旁注,这将始终输出最短的组合,因为它会从最短到最长迭代长度。