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

时间:2015-08-22 20:50:29

标签: list function python-2.7 append

我正在尝试编写一个代码来打印二叉树中的路径,该路径加起来传递给函数。对于一个简单的测试用例,下面的代码仍然没有成功:

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

运行时错误消息: Line 26: TypeError: object of type 'NoneType' has no len()

标准输出:None None

我无法理解leftPathrightPath如何成为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)

1 个答案:

答案 0 :(得分: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),然后使用"追加"函数调用作为pathSumHelper函数中的一个参数,它是一个NoneType(它就地修改了对象,并返回None,这就是为什么当你从控制台调用它时,它什么也不返回)。

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

path + [root.value]

在你的函数调用中,它将返回一个实际的列表。

我建议您执行以下操作,因为您要修改" path"原地我在假设。

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]