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[:]
比调用
列表
构造函数更短更快。谢谢。我不知道:-)我鼓励你编辑你的帖子,添加一个合适的编程语言标签,以及一个预期的和实际的(不正确的)输出-这样你会得到令人厌烦/更好的答案。