Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何找到满足sum(L)=k的列表中元素的和,其中L是列表,k是正整数?_Python - Fatal编程技术网

Python 如何找到满足sum(L)=k的列表中元素的和,其中L是列表,k是正整数?

Python 如何找到满足sum(L)=k的列表中元素的和,其中L是列表,k是正整数?,python,Python,给定列表L或L和k正整数的子列表作为输入,我需要定义一个递归函数(不使用切片),它的输入是(L,k),如果和(L)=k,则返回True,否则返回False 我尝试了以下代码: def sum_rec(L,k): import itertools n = len(L) i=0 if sum(L) == k: return True while len(L)> 1: sub_L = list(itertools.combination

给定列表L或L和k正整数的子列表作为输入,我需要定义一个递归函数(不使用切片),它的输入是(L,k),如果和(L)=k,则返回True,否则返回False

我尝试了以下代码:

def sum_rec(L,k):
   import itertools
   n = len(L)
   i=0
   if sum(L) == k:
        return True
   while len(L)> 1:
       sub_L = list(itertools.combinations(L, n-i-1))
       i+=1
       for sub_lst in sub_L:
           s_rec(sub_lst,k)
   else:
       return False

我得到了“ValueError:r必须是非负的”,而且代码没有检查所有子列表。还有别的办法吗?我正在使用python 3.6

我建议您使用以下解决方案,通过递归(从索引0开始)将每个子列表的元素逐一求和,直到到达最后一个元素:

from itertools import combinations

def AllSublists(L):
    """ Return list of sub-lists (of any size) from list L """
    return [list(j) for i in range(1, len(L)+1) for j in list(combinations(L, i))]

def RecIfSum(L, k, i=0):
    """ --------------- Recursive function -------------------
        Return True if sum(L) equals k, otherwise return False """
    if (i == len(L)-1):
        return (L[i] == k)
    else:
        L[i+1] += L[i]
        return RecIfSum(L, k, i+1)

def CheckIfSum(myList, k):
    """ Return True if the sum of a sub-list of myList equals k, otherwise return False """
    for L in AllSublists(myList):
        if RecIfSum(L, k):
            return True
    return False

print(CheckIfSum([1,4,8,9], 18)) # True
print(CheckIfSum([1,4,8,9], 19)) # False
print(CheckIfSum([1,4,8,9], 20)) # False
print(CheckIfSum([1,4,8,9], 21)) # True
print(CheckIfSum([1,4,8,9], 22)) # True

解释代码的哪一部分不起作用。您得到了哪些错误的结果,以及您期望的结果是什么?欢迎使用堆栈溢出!我可以在你的代码中看到一个明显的错误,但如果你能更详细地解释“对我来说不太好”,这会有很大帮助。你应该发布错误并回溯你得到的信息。谢谢,我刚刚修改了我的帖子:)她在问题中提到我们不能使用切片语法。@Shubham-Oups我错过了。谢谢,我更新了我的答案以避免使用切片。谢谢你的答案,但是如果你尝试recIfSum([1,4,8,9],18),它会返回false,即使[1,4,8,9]包含满足8+9+1=18的子列表。很抱歉,我在问题中没有提到这一点。@romanasa好的,我在您最初的请求中遗漏了这一点(我仍然觉得不太清楚),但现在我明白了。关于你的评论,我更新了我的答案。@Laurent H.很有魅力,谢谢你的帮助:)