且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

查找具有给定总和的数字列表的所有组合

更新时间:2021-11-25 22:55:17

您可以使用itertools遍历每个组合每种可能的大小,并过滤掉所有不等于10的内容:

You could use itertools to iterate through every combination of every possible size, and filter out everything that doesn't sum to 10:

import itertools
numbers = [1, 2, 3, 7, 7, 9, 10]
result = [seq for i in range(len(numbers), 0, -1) for seq in itertools.combinations(numbers, i) if sum(seq) == 10]
print result

结果:

[(1, 2, 7), (1, 2, 7), (1, 9), (3, 7), (3, 7), (10,)]

不幸的是,这有点像O(2 ^ N)复杂度,所以它不是不适合大于20个元素的输入列表。

Unfortunately this is something like O(2^N) complexity, so it isn't suitable for input lists larger than, say, 20 elements.