由于某种原因,列表x中的第一个值正在更新,但列表中其他所有内容都没有更新。我很困惑,因为x是全局变量,并且仅在replace函数中更新。如果我在打印语句之间重新声明x,则该程序有效。我已将其注释掉,因为它感觉像是草率的解决方案。
x = [1,3,2,4,2,1,1,2,2,1]
def REPLACE(new,old,x):
if str(old) not in str(x):
return x
elif x[0] == old:
x[0] = new
return x[0:1] + REPLACE(new,old,x[1:])
else:
return x[0:1] + REPLACE(new,old,x[1:])
print(REPLACE(10,1,x))
#x = [1,3,2,4,2,1,1,2,2,1]
print(REPLACE(1,3,REPLACE(1,3,x)))
答案 0 :(得分:0)
在您的REPLACE
函数中,唯一改变x
的语句是:
x[0] = new
仅修改x
的第一项,而
return x[0:1] + REPLACE(new,old,x[1:])
创建x
的切片,这是新的列表实例,因此对切片的进一步更改将不会反映在原始x
中。
如果您打算使此函数同时更改x
并在保持递归的状态下返回结果,则可以使用索引作为参数:
def REPLACE(new, old, x, i=0):
if i >= len(x):
return x
if x[i] == old:
x[i] = new
return REPLACE(new, old, x, i + 1)
答案 1 :(得分:0)
您可以在REPLACE函数中更改其值。由于您要形成新列表,因此不必这样做。只需阅读x,而不更改它即可。
x = [1,3,2,4,2,1,1,2,2,1]
def REPLACE(new,old,x):
if str(old) not in str(x):
return x
elif x[0] == old:
return [new] + REPLACE(new,old,x[1:])
else:
return x[0:1] + REPLACE(new,old,x[1:])
print(REPLACE(10,1,x))
print(REPLACE(1,3,REPLACE(1,3,x)))