【发布时间】:2018-04-25 15:53:30
【问题描述】:
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
sum = 25
ans = []
def recurse(s, traverse, ls):
#append tuple
ls = ls + (traverse.val,)
if (traverse.right):
recurse(s, traverse.right, ls)
if (traverse.left):
recurse(s, traverse.left, ls)
if (s==sum):
#convert touple and add to answer
tmp = list(ls)
ans.append(tmp)
a = tuple()
recurse(0, root, a)
在此代码中,我将列表动态附加到列表 (ans)。在此示例中,我使用递归并使用元组来构建每个子列表,因为它是不可变的。然后,我将其转换为列表并将其附加到我的答案中。如果我只使用列表,我将无法在每次调用我的函数时传递副本。
以这种方式使用元组有任何性能缺点吗?有没有更好的方法来递归创建类似问题的列表?
此外,这种方法实际上不适用于 2d 列表...制作 2D 不可变列表的最佳方法是什么?
【问题讨论】:
-
你应该使用
if traverse.right is not None:而不是if (traverse.right): -
这是有原因的吗?
-
如果您调用
if object,其中object是某个类的某个实例,它将调用其__bool__或__nonzero__方法(如果存在)(取决于python 版本)。因此,如果if var正在检查某些对象的返回值__bool__/__nonzero__方法,如果var为 None 是不明确的。if object is None但是,只有明确检查变量的身份是否为None。