返回(递归)修改后的列表?

时间:2017-04-11 01:55:05

标签: python list recursion

我希望获取一个列表list=[3,2,1,3,2,1],并递归检查每个项是否为值a,如果是,请将该值替换为副本中的b thelist,并返回该副本。 到目前为止,这是我的代码:

def replace(list,a,b):
    #base case 1: list is empty
    if list==[]:
        return list
    #case 1: the first character is a
    elif list[0] == a:
        list[0] = b
        return replace(list[1:],a,b)
    #case 2: the first character is not a
    elif list[0]!=a:
        return replace(list[1:],a,b)
    return list

我的问题是我的(打印每个递归,打印语句被删除以简短)从此代码输出如下所示:

[3,2,1,3,2,1]
[2,1,3,2,1]
[4,3,2,1]
[3,2,1]
[2,1]
[4]

我正在寻找的输出是:

[3,2,4,3,2,4]

我不确定如何获得所述输出。

2 个答案:

答案 0 :(得分:3)

相同的结果没有递归:

def replace_list(thelist,a,b):
    return [ b if l == a else l for l in thelist ]

print replace_list([3,2,1,3,2,1], 1, 4)  

输出:

[3, 2, 4, 3, 2, 4]

答案 1 :(得分:1)

再次呼叫替换时,您错过了第一个元素。只需将第一个元素附加到结果的前面。

def replace(thelist,a,b):
    #base case 1: thelist is empty
    if thelist==[]:
        return thelist
    #case 1: the first character is a
    elif thelist[0] == a:
        thelist[0] = b
    return thelist[:1] + replace(thelist[1:], a, b)


print replace([3,2,1,3,2,1], 1, 4)