为什么即使在我修改函数内部的值后列表的值也没有改变? [重复]

问题描述 投票:-1回答:4

这个问题在这里已有答案:

我们知道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]。

python string list mutable
4个回答
1
投票

正如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
投票

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

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

0
投票

你没有改变名单;你只是改变局部变量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)

0
投票
def change(l):
   l[:] = l[2:5]

上面的代码将起作用。

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

© www.soinside.com 2019 - 2024. All rights reserved.