Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python I';我一直在尝试替换(L,old_obj,new_obj),但我能找出为什么它不能返回正确的代码_Python - Fatal编程技术网

Python I';我一直在尝试替换(L,old_obj,new_obj),但我能找出为什么它不能返回正确的代码

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中创建一个列表,然后用一个新对象替换列表中的一个对象。例如
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=[]
我认为更好的是:

  • 生成并返回一个新的列表对象
  • 一旦您真正熟悉Python,您可能会更喜欢这样写:

    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]