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

2024-09-29 06:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用递归函数来反转一个列表。不幸的是,我对递归还相当陌生。这可能吗?到目前为止,这是我的代码

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

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

Tags: 代码列表lenreturnifdefwordthere
3条回答

您的问题是(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']
>>> 

如果包含运行代码时收到的错误,这将很有帮助:TypeError: Can't convert 'list' object to str implicitly

要反转列表元素的顺序,请更改:

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

^{pr2}$

(注意方括号)。在

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

<罢工/>

问题是你的函数只需要一个单词,而你却用一个单词列表来调用它。在

如果您按以下方式调用它,您将看到它工作正常:

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

或者,如果希望在列表中存储反转的字符串:

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

函数失败的一个角落是空字符串。我不知道这是否是一个有效的输入,所以它可能不是一个问题(但是修复起来很简单)。在

如果您想用Python完成:

reversed(listWord)

假设单词是一个列表或元组

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

为了得到一份名单:

^{pr2}$

应该行得通

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

相关问题 更多 >