def replace(L, old_obj, new_obj):
L=[]
for i in enumerate(L):
if i ==old_obj:
L.replace(old_obj, new_obj)
return
我不知道该怎么做才能使此代码起作用。我是否遗漏了一些重要的东西可以更改此代码?我想在L中创建一个列表,然后让一个新对象替换列表中的一个。例如L=[1,2,1,2,3]. replace(L, 2, 'a')
。 L=[1,'a',1,'a',3]
答案 0 :(得分:1)
我认为您的函数的第一行:
L=[]
是您遇到的第一个问题,它会掩盖此处的其他错误。 Python既不是按值调用也不是按引用调用-它是call-by-object-reference,这是微妙的(但重要的是)不同。即使您将L
对象作为函数的第一个参数传递,L=[]
也不会更改该对象。它创建一个 new 空列表对象,并将名称L
分配给该对象。在那一刻之后,一旦函数返回,您对L
所做的任何操作都将永远丢失。即使您的其余职能正常运转,您也永远不会知道,因为您的劳动成果将会丢失。
我建议在此使用以下两种方法之一:
1:将L
对象突变就位。
def mutate_list(L, old_obj, new_obj):
for i, value in enumerate(L):
if value == old_obj:
L[i] = new_obj
我认为更好的是:
def return_new_list(L, old_obj, new_obj):
new_list = []
for value in L:
if value == old_obj:
new_list.append(new_obj)
else:
new_list.append(value)
return new_list
一旦您真正熟悉Python,您可能会写得更像:
new_list = [value if value != old_obj else new_obj for value in L]
...但是那是另一天。