Python中使用递归的排序函数

2024-04-25 19:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个函数gensortremAll

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时,我得到一个错误

can only concatenate list (not 'int') to list.

remAll工作正常。如果我试图创建一个空列表来添加z,我会得到一个不同的错误。在


Tags: 函数inlenreturnifdef错误order
3条回答

您的错误源于基本情况检查,其中return 0。把空名单还给我就行了

如果没有特殊原因在你的删除函数中使用递归,我可以建议你吗

def remAll(e, L):
    return [x for x in L if x != e]

另外,这种排序方法可以删除重复项。在

问题是因为递归的基本情况返回的是0,而不是空列表。更改以下代码:

if len(L) == 0:   
    return 0

^{pr2}$

而且应该有效。在

def gensort(L):
  if len(L) == 0:
    return 0       # <   A
  else:
    z = min(L)
    L = remAll(z, L)
    return [z] + gensort(L)     # <   B

在A行中,如果L为空,则返回数字0。因此,在递归调用之后,您将在B行中得到[z] + 0,这是一个错误,因为您不能添加列表和数字。在

你应该返回一个空列表,你应该写下来

^{pr2}$

对于A线

相关问题 更多 >