我编写了这个递归函数来检查列表中的特定字符串,如果找到了字符串,它应该在列表中反转,但我似乎无法将列表保留为列表。我的输出是一个连接的字符串。有人可以建议如何维护列表类型吗?
test_list = ['cat', 'hat', 'bat', 'sat']
test_string = 'bat'
def reverser(some_list, some_string):
if some_list == []:
return ''
elif len(some_list) == 1 and item in some_list == some_string:
return some_string[::-1]
else:
if some_list[0] == some_string:
return some_string[::-1] + reverser(some_list[1:], some_string)
if some_list[0] != some_string:
return some_list[0] + reverser(some_list[1:], some_string)
reverser(test_list, test_string)
输出是:
'cathattabsat'
但我希望它是:
['cat', 'hat', 'tab', 'sat']
答案 0 :(得分:1)
如果希望函数返回字符串列表,则需要确保在基本情况和循环内添加适当的列表而不是字符串。
此外,在这一行:
elif len(some_list) == 1 and item in some_list == some_string:
item
未定义。您可以将此行替换为:
elif len(some_list) == 1 and some_string in some_list
最后,这将完成这项工作:
test_list = ['cat', 'hat', 'bat', 'sat']
test_string = 'bat'
def reverser(some_list, some_string):
if some_list == []:
return []
elif len(some_list) == 1 and some_string in some_list:
return [some_string[::-1]]
else:
if some_list[0] == some_string:
return [some_string[::-1]] + reverser(some_list[1:], some_string)
if some_list[0] != some_string:
return [some_list[0]] + reverser(some_list[1:], some_string)
reverser(test_list, test_string)
返回
['cat', 'hat', 'tab', 'sat']
答案 1 :(得分:1)
你的return语句总是返回一个字符串。
return some_string[::-1] + reverser(some_list[1:], some_string)
注意:some_string[::-1]
是一个字符串
将其包裹在[]
中,使其成为一个项目的列表。
return [some_string[::-1]] + reverser(some_list[1:], some_string)
然而,这比你正在做的这个奇怪的循环要简单得多。您可以使用地图或列表推导。
def reverse_string(any, match):
if any == match: return any[::-1]
else: return any
def reverser(some_list, some_string):
return [reverse_string(s, some_string) for s in some_list]
答案 2 :(得分:1)
你的递归函数比它需要的更复杂:
def reverser(some_list, some_string):
if some_list == []:
return []
word = some_string[::-1] if some_list[0] == some_string else some_list[0]
return [word] + reverser(some_list[1:], some_string)
但正如另一位回答者所提到的,使用列表理解可以做得更好:
[word[::-1] if word == some_string else word for word in some_list]
答案 3 :(得分:0)
考虑所需的返回类型以及要返回的表达式:
return some_list[0] + reverser(some_list[1:], some_string)
您有一个字符串列表。所以some_list[0]
将是一个字符串。你正在返回一个字符串,加上任何东西。
如果要返回列表,请以某种方式将字符串放入列表中:
return some_list[0:1] + ...
return [some_list[0]] + ...