我通过python递归来保留字符列表,但是在最后一步中遇到类型错误,我不知道为什么会这样。谢谢您
def reverseString(s):
if len(s) ==1:
s
else:
reverseString(s[1:])+list(s[0])
像['a','b','c','d']
这样的输入,
预期输出['d','c','b','a']
存在类型错误:
+不支持的操作数类型:“ NoneType”和“列表”
答案 0 :(得分:0)
您忘了在函数中返回某些内容。如果未显式返回某些内容,Python将隐式返回None
。
最好检查字符串的长度是否为零(因此为空字符串),以使您的函数也可以反转空字符串:
def reverseString(s):
if not s:
return s
else:
return reverseString(s[1:])+s[0]
例如:
>>> reverseString('foobar')
'raboof'
使用递归,尤其是 linear 递归在这里不是一个好主意,因为调用堆栈随字符串的长度增长,因此对于不是那么小的字符串,您将获得stackoverflow。 / p>
您可以使用字符串的reversed(..)
迭代器,并因此返回带有以下内容的字符串:
>>> ''.join(reversed('foobar'))
'raboof'
如果您想反向遍历字符串而不构造一个字符串(例如,在反向处理单个字符时),则这特别有用。
或通过切片,如@Austin所说:
>>> 'foobar'[::-1]
'raboof'
答案 1 :(得分:0)
您不必说s
,而只需说return s