Python I';我一直在尝试替换(L,old_obj,new_obj),但我能找出为什么它不能返回正确的代码
我不知道该怎么做才能让这段代码正常工作。我是否遗漏了一些重要的内容,这些内容将允许更改此代码?我想在L中创建一个列表,然后用一个新对象替换列表中的一个对象。例如Python I';我一直在尝试替换(L,old_obj,new_obj),但我能找出为什么它不能返回正确的代码,python,Python,我不知道该怎么做才能让这段代码正常工作。我是否遗漏了一些重要的内容,这些内容将允许更改此代码?我想在L中创建一个列表,然后用一个新对象替换列表中的一个对象。例如L=[1,2,1,2,3]。更换(L,2,'a')L=[1,'a',1,'a',3]我认为函数的第一行: def replace(L, old_obj, new_obj): L=[] for i in enumerate(L): if i ==old_obj: L.replace(o
L=[1,2,1,2,3]。更换(L,2,'a')
L=[1,'a',1,'a',3]
我认为函数的第一行:
def replace(L, old_obj, new_obj):
L=[]
for i in enumerate(L):
if i ==old_obj:
L.replace(old_obj, new_obj)
return
是您遇到的第一个问题,它将掩盖此处的其他错误。Python既不是按值调用,也不是按引用调用,而是有细微(但重要的)区别。即使您将L
对象作为函数的第一个参数传入,L=[]
也不会更改该对象。它创建一个新的空列表对象,并为该对象指定名称L
。在那一刻之后,只要函数返回,您对L
所做的任何操作都将永远丢失。即使你让你的其他功能工作,你永远不会知道,因为你的劳动成果将丢失
我建议采用以下两种方法之一:
1:将L
对象进行适当的变异
L=[]
我认为更好的是:
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
…但那是另一天。使用
def replace(L,old_obj,new_obj):对于枚举中的i,v(L):如果v==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
new_list = [value if value != old_obj else new_obj for value in L]