我试图使用递归函数反转列表。不幸的是,我对递归很新。这可能吗?到目前为止,这是我的代码
def stringRev (word):
worLen = len(word)
if worLen == 1:
return word
return (word[-1]) + stringRev(word[:-1])
listWord = ["hey", "there", "jim"]
print(stringRev(listWord))
答案 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))
应该有效
但是如果你想要一个算法,我想反过来不是你的朋友!