Python 2.7:在函数参数中使用list.append

Python 2.7:在函数参数中使用list.append,list,function,python-2.7,append,List,Function,Python 2.7,Append,我正试图编写一个代码来打印二叉树中的路径,该路径加起来就是传递给函数的总和。对于一个简单的测试用例,下面的代码一直失败: 上次执行的输入:Binary Tree=[1],sum=1 运行时错误消息: 第26行:TypeError:类型为“NoneType”的对象没有len() 标准输出:None无 我无法理解leftPath和rightPath如何变成None。我一个也不回 ''' Created on Aug 12, 2015 @author: debpriyas ''' class BT

我正试图编写一个代码来打印二叉树中的路径,该路径加起来就是传递给函数的总和。对于一个简单的测试用例,下面的代码一直失败:

上次执行的输入:
Binary Tree=[1],sum=1

运行时错误消息:
第26行:TypeError:类型为“NoneType”的对象没有len()

标准输出:
None无

我无法理解
leftPath
rightPath
如何变成
None
。我一个也不回

'''
Created on Aug 12, 2015

@author: debpriyas
'''

class BTNode(object):
    '''
    classdocs
    '''
    def __init__(self,value, leftBTNode=None, rightBTNode=None):
        '''
        Constructor
        '''
        self.value = value
        self.left = leftBTNode
        self.right = rightBTNode
        # To deal with duplicate values in BST. 
        self.count = 1

def pathSum(root, sum):
    return pathSumHelper( root, sum, [])

def pathSumHelper(root, sum, path):

    if root == None:
        if sum == 0:
            return path
        else:
            return []

    leftPath = pathSumHelper(root.left, sum-root.value, path.append(root.value))
    rightPath = pathSumHelper(root.right, sum-root.value, path.append(root.value))
    print leftPath, rightPath
    if len(leftPath) == 0 and len(rightPath) == 0:
        return []

    if len(leftPath) == 0:
        return [rightPath]
    elif len(rightPath) == 0:
        return [leftPath]
    return [leftPath, rightPath]


if __name__ == '__main__':
    root = BTNode(1)

    print pathSum(root, 1)
问题在于:

leftPath = pathSumHelper(root.left, sum-root.value, path.append(root.value))
rightPath = pathSumHelper(root.right, sum-root.value, path.append(root.value))
您使用的是path.append(root.value),然后使用“append”函数调用返回的内容作为pathSumHelper函数中的参数,这是一个非类型(它在适当的位置修改对象,并返回None,这就是为什么从控制台调用它时,它不返回任何内容)

相反,您需要在函数调用之前使用append,然后在函数中使用path或do

path + [root.value]
在函数调用中,它将返回一个实际列表

我建议您执行以下操作,因为您希望在我假设的位置修改“路径”

path.append(root.value)
leftPath = pathSumHelper(root.left, sum-root.value, path)
如果总和为0,则它将返回一个Nonetype,这将在len调用期间导致TypeError

一个简单、可验证、可复制的示例是:

>>>def a(x):
...    print(x)

>>>mylist = list(range(10))
>>> a(mylist.append(1))
None

>>> a(mylist + [5])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 5]

请尝试将被剪断的代码转换为可以在隔离系统上运行的。@das-g:已更改的代码。代码是最小的,并且在更早的时候就完成了。现在我猜它是可验证的。我完全忘记了它是一个方法,并且会返回一个值。现在它有意义了。现在回过头来看,这是显而易见的。谢谢@Alexander Huszagh。当然,如果我帮助了你,并且回答了你的问题,你觉得没有更好的答案了,请随意接受我的回答。很乐意帮忙。如何接受答案。我不能投票,因为分数太少了。是否有其他方式接受答案。看看这是否有帮助: