Есть ли способ получить новый список целых чисел из списка целых чисел, который в сумме дает определенное значение? [дубликат]

Aug 20 2020

У меня есть список целых чисел, они случайным образом сортируются и могут повторяться: mylist = [5,4,2,4,5,6,7,3,8,3]и определенное значение (например: value=35)

Теперь я хочу получить список целых чисел из mylist, мы его sumlistназываем, который включает все возможные варианты чисел, которые вместе составляют value.

Чтобы когда я сделал:

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

sum == valueвернется True.

Ответы

E-A Aug 20 2020 at 04:26

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]

Так же, как небольшое примечание, это всегда будет выводить самую короткую комбинацию, поскольку она перебирает длины от самой короткой к самой длинной.