0
我需要這樣做:我有整數列表,我使所有可能的組合包含這些數字中的3個,輸出是包含這些組合的總和的列表。 (不是所有組合的總和,而是每個組合的總和,但對於每個組合的總和)將整數的組合轉換爲這些組合的總和列表
我的算法這樣做:使所有可能的組合列表,然後計算每個組合的總和並將其保存到列表中,什麼太不起作用如果整數的數量很大。這裏是蟒蛇中的小樣本:
import itertools
array=[1,2,3,4]
combs=[]
els = [list(x) for x in itertools.combinations(array, 3)]
combs.extend(els)
result=list(map(sum, combs))
你能想出一些更有效的解決方案嗎?也許如果有某種方法可以使它成爲一個循環,首先沒有創建組合列表,並在第二個時候計算每個組合的總和,然後直接計算剛剛創建的組合的總和,將其保存到列表中,然後繼續另一個,直到所有的組合和總和完成。
何不你是不是直接去'[sum(x)for ...]'?將元組轉換爲列表,然後將列表列表轉換爲列表的新列表,然後轉換爲另一個新的整數列表,似乎完全沒有意義。 – jonrsharpe
在不消除「組合」組件的情況下,無法爲大n生效。這本質上是無效的(參見[combinatorial explosion](https://en.wikipedia.org/wiki/Combinatorial_explosion))你需要一個不同的方法來解決你的問題。但爲此,您需要首先定義您的問題。 – ayhan
如果你可以避免做一個清單,那會更好。看看你是否可以重新組織你的邏輯,以便你可以在生成每一筆款項時進行操作。例如,'對於map中的s(sum,combinations(array,3)):do_stuff(s)' –