为什么即使在函数中修改了列表的值后,列表的值也没有改变?[复制]

Why isn't the value of the list changing even after I modify its value inside the function? [duplicate]

提问人:cherryWood55 提问时间:3/30/2019 更新时间:3/30/2019 访问量:92

问:

我们知道 Python 中的列表是可变对象。但是,以下代码不会更改正在函数中修改其值的列表的值。

def change(l):
    l=l[2:5]
    return()
l=[1,3,4,5,2,10]
change(l)
print (l)

我期望输出 [4,5,2],但它显示了结果 [1,3,4,5,2,10]。

字符串 列表 可变

评论

4赞 UnholySheep 3/30/2019
l=l[2:5]替换本地引用以指向新列表。它根本不会修改原始列表
2赞 Mark 3/30/2019
内部函数的名称与外部函数的名称不同。您所要做的就是将名称重新分配给新引用。你可以做一些类似的事情。或者返回一个新列表并在函数外部重新分配:lll[:]=l[2:5]return l[2:5]l = change(l)

答:

0赞 Reuel Dsilva 3/30/2019 #1

在函数中更改列表时,需要返回更新的列表,例如:

def change(l):
    l=l[2:5]
    return l
0赞 chepner 3/30/2019 #2

您没有改变列表;您只是在更改局部变量的值。相反,请修改该变量引用的对象l

def change(lst):
    del lst[5:]  # or lst[5:] = []
    del lst[:2]  # or lst[:2] = []
    # or just l[:] = l[2:5], which I forgot about until reading César Correa's answer


some_list = [1,3,4,5,2,10]
change(some_list)
print (some_list)
1赞 César Correa 3/30/2019 #3

正如 UnhloySheep 和 Mark Meyer 所说,将代码从

l = l[2:5]

l[:] = l[2:5]

应该可以解决您的问题。 完整的代码应该是:

def change(l):
   l[:]=l[2:5]
return()

l=[1,3,4,5,2,10]
change(l)
print (l)

这张打印作为你的答案。

[4, 5, 2]

0赞 Suresh Kumar 3/30/2019 #4
def change(l):
   l[:] = l[2:5]

上面的代码将起作用。

正常切片在切片后更改列表的引用。您可以使用切片前后来检查这一点id()