我有这个功能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 :(得分:0)
您的错误源于基本案例检查,即return 0
。只需返回空列表L。
如果在删除功能中没有使用递归的特殊原因,我可以建议
def remAll(e, L):
return [x for x in L if x != e]
另外注意,此排序方法会删除重复项。
答案 1 :(得分:0)
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
,这是一个错误,因为您无法添加列表和数字。
你应该返回一个空列表,你应该写一下
return []
代表A行。
答案 2 :(得分:0)
问题是因为递归的基本情况是返回0
而不是空列表。更改以下代码:
if len(L) == 0:
return 0
到
if len(L) == 0:
return []
它应该有效。