合計が特定の値になる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]
簡単な補足として、これは常に最短の組み合わせを出力し、最短から最長までの長さを繰り返し処理します。