python 从给定的列表中查找总和为特定数字的数字列表

vfh0ocws  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(204)

下面的问题可能是微不足道的,但我不是编程Maven。
使用语言:Python3
问题是:您已获得一个列表"a =[a1,a2,a3,a4]"。其目的是检查一个特定的数字(例如"S")是否可以表示为列表"a"中数字的总和。请注意,可以根据需要多次从列表中获取数字。
这个问题被称为"Howsum"。
我的代码:

def hs_slow(tsum,ar):
    if tsum==0:
        return []
    if tsum<0:
        return None
    for i in ar:
        ntsum=tsum-i
        hsResult=hs_slow(ntsum,ar)
        if hsResult!=None:
            hsResult.append(i)
            return hsResult.append(i)
        
    return None

我的代码逻辑:
如果'tsum'对于一组特定的数字是负数,那么这不会得到正确的数字,因此我们应该得到一个null返回值。
如果'tsum'是零,这意味着,我们已经从列表中找到了一组特定的数字,这组数字会导致正确的总和。因此,我们应该得到这组数字作为结果。为此,我返回一个空数组,即当'0'命中时[]。然后,数字'i'应该贡献给正确的数字列表。因此,apperbd它的结果。
不知何故,如果我有hs_slow(3,[2,3]),这在基本层面上是有效的,但对于hs_slow(7,[2,3]),它失败了,虽然对于前一种情况我得到了[3],但对于后一种情况我得到了[]。
我不明白,为什么除了基本的情况外,没有附加这个列表。
帮助将受到高度赞赏。如果你能解释问题就更好了。
先谢了。
请注意,此问题与中描述的问题类似:
Finding a sequence from given numbers that sum to given value?
但我需要弄清楚我的方法出了什么问题。

rta7y2nd

rta7y2nd1#

hsResult='+str(hsResult)+'\n'行不是有效的Python语法。看起来您试图连接字符串,但没有正确使用+运算符。
hsResult.append(i)行缩进不正确。它应该在if块内部,而不是在其之后。
返回的hsResult.append(i)行将无法按预期工作。append方法在适当的位置修改列表,并且不返回任何内容,因此return语句将不会返回修改后的列表。相反,您可以在附加元素后返回hsResult。

def hs_slow(tsum, ar):
    if tsum == 0:
        return []
    if tsum < 0:
        return None
    for i in ar:
        ntsum = tsum - i
        hs_result = hs_slow(ntsum, ar)
        if hs_result is not None:
            hs_result.append(i)
            return hs_result
    return None

相关问题