我希望获取一个列表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]
我不确定如何获得所述输出。
答案 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)