给定元素长度的Python子集和问题

给定元素长度的Python子集和问题,python,subset,subset-sum,Python,Subset,Subset Sum,对于给定的集合、元素的总和和长度, 我想得到集合是否满足条件的布尔值 例如 Input : set = [18,0,2,20], sum = 20, length = 2 <br> Output : True (subset [18,2] satisfy the sum=20 for given length 2) 如果允许您使用导入的模块,则具有一个组合功能,可以使此操作变得非常简单: 来自itertools导入组合的 集合=[18,0,2,20] 总数=20 长度=2 结果=[

对于给定的集合、元素的总和和长度,
我想得到集合是否满足条件的布尔值

例如

Input : set = [18,0,2,20], sum = 20, length = 2 <br>
Output : True (subset [18,2] satisfy the sum=20 for given length 2)

如果允许您使用导入的模块,则具有一个组合功能,可以使此操作变得非常简单:

来自itertools导入组合的

集合=[18,0,2,20]
总数=20
长度=2
结果=[c表示组合中的c(集合,长度),如果和(c)=总计]
如果结果为:
打印(“真,子集”,结果[0],“满足总和”,总计,“给定长度”,长度)
其他:
打印(“假”)

如果你需要它是递归函数,考虑在集合中的每个元素<代码> x>代码>,如果你可以在后面的元素中找到一个子集:<代码> n-1 < /Case>元素,即“<代码> SUMX x/COD>”,你有一个解决方案:<代码>求和/长度=n< /代码> .< 例如:

def subSum(数字、总数、长度):
如果长度(数字)<长度或长度<1:
返回[]
对于索引,枚举中的数字(数字):
如果长度==1,数量==总数:
报税表[号码]
子集=子集(数字[索引+1:],总数,长度-1)
如果子集:
返回[number]+子集
返回[]

使用
itertools.组合

from itertools import combinations

inp = [18,0,2,20]
length = 2
sum_ = 20

def isSubsetSum(data, length, sum_):
    data = [i[0]+i[1] for i in combinations(data,length)]
    if sum_ in data:
        return True
    return False

print(isSubsetSum(inp,length, sum_))
def isSubsetSum(set, n, sum):
    if sum == 0:
        return True
    if (sum != 0) and (n == 0):
        return False
    if (set[n-1] > sum):
        return isSubsetSum(set,n-1,sum)
    # (a) including the last element
    # (b) excluding the last element
    # Not "AND", But "OR" !!!!!
    return isSubsetSum(set,n-1,sum) or isSubsetSum(set,n-1,sum-set[n-1])
from itertools import combinations

inp = [18,0,2,20]
length = 2
sum_ = 20

def isSubsetSum(data, length, sum_):
    data = [i[0]+i[1] for i in combinations(data,length)]
    if sum_ in data:
        return True
    return False

print(isSubsetSum(inp,length, sum_))