0

我正在尝试使用递归函数来反转列表。不幸的是,我对递归还很陌生。这可能吗?到目前为止,这是我的代码

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

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

3 回答 3

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

于 2013-03-01T17:14:49.070 回答
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"]]

函数失败的一个极端情况是空字符串。我不知道这是否是一个有效的输入,所以它可能不是问题(但修复起来微不足道)。

于 2013-03-01T17:06:59.043 回答
1

如果你想在 Python 中完成:

reversed(listWord)

假设 word 是一个列表或一个元组

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

并获得一份清单:

list(reversed(listWord))

应该管用

但是如果你想要一个算法,我猜 reversed 不是你的朋友!

于 2013-03-01T17:10:13.617 回答