繁体   English   中英

根据所选总和显示所有数字组合

[英]Display all combinations of numbers based on a sum chosen

最近,我插入了一个代码:

def subset_sum(numbers, target, partial=[]):
s = sum(partial)

# check if the partial sum is equals to target
if s == target: 
    print(partial, target)
if s >= target:
    return  # if we reach the number why bother to continue

for i in range(len(numbers)):
    n = numbers[i]
    remaining = numbers[i+1:]
    subset_sum(remaining, target, partial + [n]) 

if __name__ == "__main__":
subset_sum([1, 2, 3] + [1, 2, 3], 5)

目标是获得列出的所有数字组合,这些组合可以相加以满足所需的总和。 比如我有两个列表[1,2,3]和[2,3,4],目标是得到这些数字的所有等于3的组合。答案应该是[1,2]等等..

但问题是我需要 Python 到 select 每个列表中只有一个元素,而不是更多。 我该如何解决这个问题?

非常感谢!

你的意思是这样的:

target = 5

a = [1,2,3,4,5,6,7,8,9]
b = [1,2,3,4,5,6,7]

combinations = {(x,y) for x in a for y in b if x+y==target}

它在第一个列表和第二个列表上进行迭代,并且仅当它们加起来达到您想要的目标时才添加对。

但是,由于ab不是集合,因此可能存在重复的条目,因此可能存在重复的元组。 因此,我建议您在继续之前将它们转换为集合,如下所示:

set_a = {x for x in a}

这也是我将结果放入集合的原因。 对于重复条目和大尺寸,它会很快变得非常混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM