Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中使用递归的排序函数_Python_Sorting_Recursion - Fatal编程技术网

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 []