我有一个数字列表,例如
numbers = [1, 2, 3, 7, 7, 9, 10]
如您所见,数字可能在此列表中出现多次。
我需要获得具有给定总和的这些数字的所有组合,例如 10
。
组合中的项目可能不会重复,但是 numbers
中的每个项目必须被唯一地对待,这意味着例如列表中的两个 7
代表具有相同值的不同项目。
顺序并不重要,因此 [1, 9]
和 [9, 1]
是相同的组合。
组合没有长度限制, [10]
与 [1, 2, 7]
一样有效。
如何创建满足上述条件的所有组合的列表?
在此示例中,它将是 [[1,2,7], [1,2,7], [1,9], [3,7], [3,7], [10]]
原文由 Byte Commander 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 itertools 遍历每种可能大小的每种组合,并过滤掉总和不为 10 的所有内容:
结果:
不幸的是,这有点像 O(2^N) 复杂度,因此它不适合大于 20 个元素的输入列表。