Python 从列表中查找任意元素子集的乘积

Python 从列表中查找任意元素子集的乘积,python,algorithm,list,math,Python,Algorithm,List,Math,从列表中找到任意数量元素的乘积的最佳方法是什么 e、 如果我有[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):

从列表中找到任意数量元素的乘积的最佳方法是什么

e、 如果我有
[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]

您可以在列表中使用
itertools.compositions

>>> 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)]
... 
演示:


嗨,谢谢你的回答,这个方法是目前为止你知道的最快的方法吗?@freak_warrior是的。Kasra的答案在一个单一的列表理解中也是如此。好吧,我的意思是一个算法,它可以在较低的复杂度下做同样的事情,就像这个例子一样…@freak_warrior哦,好吧。我想也许你应该把它作为一个不同的问题来问r算法标签…@freak\u warrior你能解决这个问题吗?如果我的答案有用,别忘了接受它:)
>>> [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]]