String 在递归函数中将字符串转换为列表

String 在递归函数中将字符串转换为列表,string,list,python-3.x,recursion,reverse,String,List,Python 3.x,Recursion,Reverse,我编写此递归函数是为了检查列表中的特定字符串,如果找到该字符串,则应在列表中反向返回该字符串,但我似乎无法将列表作为列表保留。我的输出是一个连接的字符串。有人能建议如何维护列表类型吗 test_list = ['cat', 'hat', 'bat', 'sat'] test_string = 'bat' def reverser(some_list, some_string): if some_list == []: return '' elif len(so

我编写此递归函数是为了检查列表中的特定字符串,如果找到该字符串,则应在列表中反向返回该字符串,但我似乎无法将列表作为列表保留。我的输出是一个连接的字符串。有人能建议如何维护列表类型吗

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']

请考虑所需的返回类型以及要返回的表达式:

return some_list[0] + reverser(some_list[1:], some_string)
您有一个字符串列表。所以
某些列表[0]
将成为一个字符串。你要返回一个字符串,再加上任何东西

如果要返回列表,请以某种方式将字符串设置为列表:

return some_list[0:1] + ...
return [some_list[0]] + ...

如果希望函数返回字符串列表,则需要确保在基本情况下以及在循环中添加适当的列表,而不是字符串

此外,在这一行中:

elif len(some_list) == 1 and item in some_list == some_string:
未定义项目。您可以将此行替换为:

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']

return语句始终返回一个字符串

return some_string[::-1] + reverser(some_list[1:], 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]

您的递归函数比需要的更复杂:

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]

名称错误:全局名称“项目”未定义这些都很好!我对python非常陌生,我的代码仍然笨重。我喜欢列表理解,我只是不太擅长它们…现在!我尝试使用return[some_list[0]]+。。。但是添加额外的括号给了我一个错误,因为我忘了将基本情况也更改为列表