我有这个:
def ppend(n):
lis = []
if n.rest == None:
pass
else:
lis.append(n.first)
ppend(n.rest)
return lis
n是一个链表[1,2,3]
我得到的输出是:
[1]
但我要找的输出是:
[1,2,3]
答案 0 :(得分:2)
您正在每次递归时创建一个新的lis
列表。 (顺便提一下,您可能会尝试查找更多描述性名称。)但是,只返回第一个列表,因为您不会对递归产生的其他列表执行任何操作。相反,您只需调用该函数,该函数只创建一个新列表,而不对函数返回的值执行任何操作。您可以在以下行中看到:
ppend(n.rest) # a new list is created but nothing is done with the result of the function
如果您只计划使用该功能一次,则只需将lis
分配移到功能之外:
lis = []
def ppend(n):
if n.rest is not None: # the first if statement appears unnecessary
lis.append(n.first)
ppend(n.rest)
return lis # or don't return it but simply refer to lis where you need to
但是,如果您计划多次使用该功能并且始终需要新列表,则上述方法也不会起作用。在后一种情况下,您可以添加第二个函数,如下所示:
def make_ppend(n, lis): # add lis as a parameter to be explicit, but you could rely on scope instead of adding this extra parameter
if n.rest is not None:
lis.append(n.first)
make_ppend(n.rest, lis)
def ppend(n):
lis = [] # now in the local scope
make_ppend(n, lis)
return lis
我猜你是在追求第二种解决方案。