Python 2.7 用递归函数进行数字排序
有人能帮我弄清楚为什么我的递归函数不起作用吗? 我正在尝试对一个数字列表进行排序,以便它从最大的一个开始,然后按降序继续Python 2.7 用递归函数进行数字排序,python-2.7,recursion,Python 2.7,Recursion,有人能帮我弄清楚为什么我的递归函数不起作用吗? 我正在尝试对一个数字列表进行排序,以便它从最大的一个开始,然后按降序继续 def sort(L): newlist=[] if len(L) == 0: return [] else: z = max(L) a=newlist.append(z) g=L.remove(z) return a, sort(g) print sort([1,5,8,49,29,2]) L.remove(z)和n
def sort(L):
newlist=[]
if len(L) == 0:
return []
else:
z = max(L)
a=newlist.append(z)
g=L.remove(z)
return a, sort(g)
print sort([1,5,8,49,29,2])
L.remove(z)和newlist.append(z)都返回None。
如果希望g与L相同,但没有z元素,则可以编写:
g=list(l)
g.remove(z)
另外,当我认为您想要返回一个列表时,您正在返回多个返回值。以下似乎有效:
def sort(L):
if len(L) == 0:
return []
else:
z = max(L)
g = list(L)
g.remove(z)
return [z] + sort(g)
if __name__ == '__main__':
s = sort([1,5,8,49,29,2])
print s
你的纠正很有帮助。非常感谢。似乎没有明确说明g=list(L)g不是一个列表或其他东西。我觉得这很奇怪,但我又不是python专家。事实上,如果你写g=L,那么g就是一个列表,但它和L是同一个列表。你真正想要的是生成一个与L相同的新列表。这就是我们用g=list(L)所做的必须认识到,
remove
操作会更改列表,但不会返回任何内容。因此,在将修改后的列表传递给递归排序调用之前,需要在单独的一行中完成。FWIW,g=L[:]
比调用列表
构造函数更短更快。谢谢。我不知道:-)我鼓励你编辑你的帖子,添加一个合适的编程语言标签,以及一个预期的和实际的(不正确的)输出-这样你会得到令人厌烦/更好的答案。