我有一个列表L = [1,2,3]
,我想计算所有组合的乘积,但只能计算一次,即:
null # that is, no elements of the list are multiplied
1
2
3
1 * 2
1 * 3
2 * 3
1 * 2 * 3
我已经看到许多帖子谈论使用itertools
,排列和组合,但是这些返回结果包括[1,2,3]
,[2,1,3]
,[3,2,1]
等,这些不是我所追求的。 (如果知道这一点,我正在使用Python 3)
NB非常意识到这可能是我搜索技能的失败,而且我只是不知道我要寻找的确切术语。
答案 0 :(得分:4)
您想要的都是所有子集。事实证明,itertools recipes提供了一种生成可迭代对象的 powerset 的巧妙方法。
from itertools import chain, combinations
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
from functools import reduce
from operator import mul
for values in powerset([1, 2, 3]):
print(' * '.join([str(x) for x in values]),
'=',
reduce(mul, values, 1))
= 1
1 = 1
2 = 2
3 = 3
1 * 2 = 2
1 * 3 = 3
2 * 3 = 6
1 * 2 * 3 = 6
答案 1 :(得分:0)
您需要集合的 powerset 。 itertools
举例说明了如何找到它。