我正在尝试使用递归函数来反转列表。不幸的是,我对递归还很陌生。这可能吗?到目前为止,这是我的代码
def stringRev (word):
worLen = len(word)
if worLen == 1:
return word
return (word[-1]) + stringRev(word[:-1])
listWord = ["hey", "there", "jim"]
print(stringRev(listWord))
我正在尝试使用递归函数来反转列表。不幸的是,我对递归还很陌生。这可能吗?到目前为止,这是我的代码
def stringRev (word):
worLen = len(word)
if worLen == 1:
return word
return (word[-1]) + stringRev(word[:-1])
listWord = ["hey", "there", "jim"]
print(stringRev(listWord))
你的问题是这(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
要反转列表元素的顺序,请更改:
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"]]
函数失败的一个极端情况是空字符串。我不知道这是否是一个有效的输入,所以它可能不是问题(但修复起来微不足道)。
如果你想在 Python 中完成:
reversed(listWord)
假设 word 是一个列表或一个元组
http://docs.python.org/2/library/functions.html#reversed
并获得一份清单:
list(reversed(listWord))
应该管用
但是如果你想要一个算法,我猜 reversed 不是你的朋友!