【问题标题】:Recursively reverse a list python throws error递归反转列表python抛出错误
【发布时间】:2019-11-18 19:20:13
【问题描述】:
我想了解为什么代码 1 会抛出以下错误
"AttributeError: 'NoneType' 对象没有属性 'append'"
def reverse(s):
if len(s) == 1:
return list(s)
else:
return reverse(s[1:]).append(s[0])
如果“s”是一个字符串,同样的逻辑也可以工作
2
s="hello"
def reverse(s):
if len(s) == 1:
return s
else:
return reverse(s[1:]) + s[0]
谁能帮我理解这个?
【问题讨论】:
标签:
python-3.x
string
recursion
reverse
【解决方案1】:
您正在返回一个附加语句,它返回一个 None 而不是列表。
print(a.append('o'))
这将打印一个None
将您的代码更改为:
s = ["h", "e", "l", "l", "o"]
def reverse(s):
if len(s) == 1:
return s
else:
ret = reverse(s[1:]) # 'ret' needs to be returned
ret.append(s[0]) # here 'ret' is updated but append returns a 'None'
return ret # returning the updated 'ret'
【解决方案2】:
在第一段代码中,您将获取一个字符串列表,删除第一个元素并将其附加到最后。因此,您将一个字符串附加到一个列表中,创建一个无类型。代码的最小更改是将字符串转换为字符串列表:
s = ["h", "e", "l", "l", "o"]
def reverse(s):
if len(s) == 1:
return s
else:
return reverse(s[1:]) + list(s[0])