【问题标题】:Display all combinations of numbers based on a sum chosen根据所选总和显示所有数字组合
【发布时间】:2021-03-22 14:24:47
【问题描述】:

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

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 从每个列表中只选择一个元素,而不是更多。我该如何解决这个问题?

非常感谢!

【问题讨论】:

  • 从列表中创建集合并在其中一个集合上迭代,并在集合 2 中查找 sum 的差异和来自 set1 的数字。

标签: python numbers combinations


【解决方案1】:

你的意思是这样的:

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}

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

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多