您发布的代码不检查总和。
下面的 sn-ps 优化内存使用,而不是运行时间
如果您使用的是 Python 3,那么 combinations 已经返回了一个生成器。您所要做的就是迭代组合。如果总和正确,则从循环中打印组合和break:
from itertools import combinations
for comb in combinations(range(8, 20), 3):
if sum(comb) == 30:
print(comb)
break
输出
(8, 9, 13)
或者,您可以使用filter,然后在结果上调用next。这样你就可以得到尽可能多的组合:
from itertools import combinations
valid_combs = filter(lambda c: sum(c) == 30, combinations(range(8, 20), 3))
print(next(valid_combs))
print(next(valid_combs))
print(next(valid_combs))
输出
(8, 9, 13)
(8, 10, 12)
(9, 10, 11)
更高级和动态的解决方案是使用函数和yield from(如果您使用的是 Python >= 3.3):
from itertools import combinations
def get_combs(r, n, s):
yield from filter(lambda c: sum(c) == s, combinations(r, n))
valid_combs = get_combs(range(8, 20), 3, 30)
print(next(valid_combs))
print(next(valid_combs))
print(next(valid_combs))
输出
(8, 9, 13)
(8, 10, 12)
(9, 10, 11)