为什么我的代码为+返回不支持的操作数类型的类型错误:“ NoneType”和“ list”

时间:2019-08-31 15:18:03

标签: python algorithm

我通过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”和“列表”

2 个答案:

答案 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