使用递归函数反转字符串列表

时间:2013-03-01 17:05:51

标签: python recursion python-3.x

我试图使用递归函数反转列表。不幸的是,我对递归很新。这可能吗?到目前为止,这是我的代码

def stringRev (word):
    worLen = len(word)
    if worLen == 1:
        return word
    return (word[-1]) + stringRev(word[:-1])

listWord = ["hey", "there", "jim"]
print(stringRev(listWord))

3 个答案:

答案 0 :(得分:4)

您的问题是(word[-1])是一个字符串,而不是一个列表。所以你试图添加/连接一个字符串和一个列表。我将该表达式更改为[word[-1]]以创建列表。

>>> def stringRev (word):
...     worLen = len(word)
...     if worLen == 1:
...         return word
...     return [word[-1]] + stringRev(word[:-1])
... 
>>> listWord = ["hey", "there", "jim"]
>>> print(stringRev(listWord))
['jim', 'there', 'hey']
>>> 

PS。如果您在运行代码时收到错误,那将会很有帮助:TypeError: Can't convert 'list' object to str implicitly

答案 1 :(得分:3)

要颠倒列表元素的顺序,请更改:

return (word[-1]) + stringRev(word[:-1])

return [word[-1]] + stringRev(word[:-1])

(注意方括号)。

问题是您正在尝试将字符串(word[-1])与列表(word[:-1])连接起来。

<击>

<击>

问题是你的函数只需要一个单词,但你用一个单词来调用它。

如果按以下方式调用它,您会发现它的工作正常:

for word in ["hey", "there", "jim"]:
    print(stringRev(word))

或者,如果您希望将反向字符串存储在列表中:

l = [stringRev(w) for w in ["hey", "there", "jim"]]

你的函数失败的一个角落是空字符串。我不知道这是否是一个有效的输入,所以它可能是一个非问题(但仍然很容易修复)。

答案 2 :(得分:1)

如果你想在Python中完成它:

reversed(listWord)

假设word是列表或元组

http://docs.python.org/2/library/functions.html#reversed

获取清单:

list(reversed(listWord))

应该有效

但是如果你想要一个算法,我想反过来不是你的朋友!