Python中使用递归的排序函数
我有这个函数Python中使用递归的排序函数,python,sorting,recursion,Python,Sorting,Recursion,我有这个函数gensort和remAll: def gensort(L): """ Sorts list L in ascending order """ if len(L) == 0: return 0 else: z = min(L) L = remAll(z, L) return [z] + gensort(L) def remAll( e, L ): """ Helper function for gensort(), removes all e i
gensort
和remAll
:
def gensort(L):
""" Sorts list L in ascending order
"""
if len(L) == 0:
return 0
else:
z = min(L)
L = remAll(z, L)
return [z] + gensort(L)
def remAll( e, L ):
""" Helper function for gensort(), removes all e in L.
"""
if len(L) == 0:
return L
elif L[0] != e:
return L[0:1] + remAll(e,L[1:])
else:
return remAll(e,L[1:])
当我运行gensort时,我得到一个错误
只能将列表(而不是“int”)连接到列表
remAll
工作正常。如果我试图创建一个空列表来添加z
,我会得到一个不同的错误。您的错误源于基本情况检查,其中返回0
。只需返回空列表L
如果没有特别的理由在移除函数中使用递归,我可以建议您吗
def remAll(e, L):
return [x for x in L if x != e]
另外,这种排序方法会删除重复项
def gensort(L):
if len(L) == 0:
return 0 # <---- A
else:
z = min(L)
L = remAll(z, L)
return [z] + gensort(L) # <---- B
对于A行问题是因为递归的基本情况是返回
0
,而不是空列表。更改以下代码:
if len(L) == 0:
return 0
到
它应该会起作用
if len(L) == 0:
return 0
if len(L) == 0:
return []