Есть ли способ получить новый список целых чисел из списка целых чисел, который в сумме дает определенное значение? [дубликат]
У меня есть список целых чисел, они случайным образом сортируются и могут повторяться: 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
.
Ответы
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]
Так же, как небольшое примечание, это всегда будет выводить самую короткую комбинацию, поскольку она перебирает длины от самой короткой к самой длинной.