提问人:cherryWood55 提问时间:3/30/2019 更新时间:3/30/2019 访问量:92
为什么即使在函数中修改了列表的值后,列表的值也没有改变?[复制]
Why isn't the value of the list changing even after I modify its value inside the function? [duplicate]
问:
我们知道 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]。
答:
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()
评论
l=l[2:5]
替换本地引用以指向新列表。它根本不会修改原始列表l
l
l[:]=l[2:5]
return l[2:5]
l = change(l)