从列表中查找任何元素子集的乘积
Find product of any subset of elements from a list
从列表中查找任意数量元素乘积的最佳方法是什么?
例如,如果我有 [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.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]]
从列表中查找任意数量元素乘积的最佳方法是什么?
例如,如果我有 [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.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]]