合計が特定の値になる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]

簡単な補足として、これは常に最短の組み合わせを出力し、最短から最長までの長さを繰り返し処理します。