查找列表中任意數量元素的產品的最佳方法是什麼?從列表中查找元素的任何子集的產品
e.g如果我有[a,b,c]
作爲輸入,我應該得到[a,b,c,a*b,a*c,b*c,a*b*c]
作爲輸出(爲了輸出並不重要元素。)
PS:我們能做到這一點遞歸? (例如,您只需要的a*b
和c
的產品,以獲得產品a*b*c
的任何意見或建議,歡迎在此先感謝
查找列表中任意數量元素的產品的最佳方法是什麼?從列表中查找元素的任何子集的產品
e.g如果我有[a,b,c]
作爲輸入,我應該得到[a,b,c,a*b,a*c,b*c,a*b*c]
作爲輸出(爲了輸出並不重要元素。)
PS:我們能做到這一點遞歸? (例如,您只需要的a*b
和c
的產品,以獲得產品a*b*c
的任何意見或建議,歡迎在此先感謝
在這裏你去:!
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]
您可以在列表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]]
你好感謝你的答案是這種方法,你知道,到目前爲止最快的方法是什麼? – 2015-03-02 07:08:48
@freak_warrior是的。卡斯拉的答案在單一列表理解中也是如此。 – 2015-03-02 07:14:46
好吧,我的意思是一個算法,可以做相同的複雜性較低,就像這種情況下一樣... http://stackoverflow.com/questions/2680548/given-an-array-of-numbers-return-array -of-all-other-numbers-no-div – 2015-03-03 01:56:27