给定列表的子集子

时间:2018-03-15 05:33:45

标签: python recursion

如果您获得以下列表

a = [ 1 2 3 2 1]

加起来为9.我正在寻找小于5的所有可能组合(可配置),最多可加9个。例如:

[5 4] is valid
[3 3 3] is valid 
[4 3 2] is valid

等等

[ 1 2 3 2 1]

也有效

此外,它不能大于给定列表(a)的大小 [1 1 1 1 1 1 1 1 1]无效。

我试过(根据我看到的一些评论)

def subset_sum(numbers, target, partial=[], partial_sum=0):
    if partial_sum == target:
        yield partial
    if partial_sum >= target:
        return
    for i, n in enumerate(numbers):
        remaining = numbers[i + 1:]
        yield from subset_sum(remaining, target, partial + [n], partial_sum + n)

但我想生成一个列表,如[5 4],不仅使用给定的列表。

1 个答案:

答案 0 :(得分:0)

我认为这个版本可以完成工作

set -e
set -o errexit