특정 값을 추가하는 int 목록에서 새로운 int 목록을 얻는 방법이 있습니까? [복제]

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]

빠른 사이드 노트처럼, 이것은 항상 가장 짧은 조합을 출력하여 가장 짧은 것에서 가장 긴 것까지 길이를 반복합니다.