2015-03-02 53 views
-1

查找列表中任意數量元素的產品的最佳方法是什麼?從列表中查找元素的任何子集的產品

e.g如果我有[a,b,c]作爲輸入,我應該得到[a,b,c,a*b,a*c,b*c,a*b*c]作爲輸出(爲了輸出並不重要元素。)

PS:我們能做到這一點遞歸? (例如,您只需要的a*bc的產品,以獲得產品a*b*c

的任何意見或建議,歡迎在此先感謝

回答

2

在這裏你去:!

from itertools import combinations 

l = [2, 3, 5] 

result = [] 
for i in range(1, len(l) + 1): 
    result += list(combinations(l, i)) 

multiplied_result = [reduce(lambda x, y: x*y, lst) for lst in result] 

現在,如果我們打印的結果,我們得到

>>> print listmap 
[2, 3, 5, 6, 10, 15, 30] 
+0

你好感謝你的答案是這種方法,你知道,到目前爲止最快的方法是什麼? – 2015-03-02 07:08:48

+0

@freak_warrior是的。卡斯拉的答案在單一列表理解中也是如此。 – 2015-03-02 07:14:46

+0

好吧,我的意思是一個算法,可以做相同的複雜性較低,就像這種情況下一樣... http://stackoverflow.com/questions/2680548/given-an-array-of-numbers-return-array -of-all-other-numbers-no-div – 2015-03-03 01:56:27

1

您可以在列表compreh內使用itertools.combinations ension:

>>> def find_mul(li): 
...  return [[reduce(lambda x,y:x*y,j) for j in combinations(li,i)] for i in xrange(2,len(li)+1)] 
... 

DEMO:

>>> [list(combinations([2,3,4],i)) for i in xrange(2,len([2,3,4])+1)] 
[[(2, 3), (2, 4), (3, 4)], [(2, 3, 4)]] 
>>> l=[2,3,4] 
>>> find_mul(l) 
[[6, 8, 12], [24]]