有没有办法从一个整数列表中获取一个新的整数列表,这些列表加起来等于某个值?
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]
作为一个快速的旁注,这将始终输出最短的组合,因为它会从最短到最长迭代长度。
我有一个整数列表,它们是随机排序的并且可能会重复: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]
作为一个快速的旁注,这将始终输出最短的组合,因为它会从最短到最长迭代长度。