gpt4 book ai didi

python - 在Python中生成排列的子集但不是所有排列

转载 作者:行者123 更新时间:2023-11-28 22:16:45 24 4
gpt4 key购买 nike

我有一个列表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 非常清楚这可能是我的搜索技巧失败,我只是不知道我正在寻找的确切术语。

最佳答案

你想要的都是子集。事实证明itertools recipes提供了一种简洁的方法来生成可迭代的幂集

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

关于python - 在Python中生成排列的子集但不是所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com