1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個贊
Itertools.combinations很容易管理這個。當(dāng)您為它提供一個列表和一個長度時,它會給出該長度的所有可能組合,并且與排列不同,它會刪除重復(fù)項(xiàng)。為確保嘗試每個選項(xiàng),必須嘗試每個長度(從 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]
就像一個快速的旁注,這將始終輸出最短的組合,因?yàn)樗鼤淖疃痰阶铋L迭代長度。
添加回答
舉報(bào)