특정 값을 추가하는 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]
빠른 사이드 노트처럼, 이것은 항상 가장 짧은 조합을 출력하여 가장 짧은 것에서 가장 긴 것까지 길이를 반복합니다.