从列表中查找元素的任何子集的产品

时间:2015-03-02 06:51:01

标签: python algorithm list math

从列表中查找任意数量元素的产品的最佳方法是什么?

例如,如果我输入[a,b,c],我应该输出[a,b,c,a*b,a*c,b*c,a*b*c](输出元素的顺序并不重要。)

PS:我们可以递归吗? (例如,您只需要a*bc的产品即可获得产品a*b*c

欢迎任何想法或建议。提前谢谢!

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

您可以在列表理解中使用itertools.combinations

>>> 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)]
... 

样本:

>>> [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]]