为什么不能使用for循环(python)更改或重新分配列表中变量的值?

2024-05-21 01:02:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个数字列表,并且我想用for循环递增它们,为什么这个不起作用:

>>> list=[1,2,3,4,5]
>>> for num in list: 
...  num=num+1
... 
>>> list
[1, 2, 3, 4, 5]

我希望得到[2,3,4,5,6]。在

我知道我可以通过做

^{pr2}$

但必须有更简单的方法。在


Tags: 方法in列表for数字numlistpr2
3条回答

这是因为您只获得对列表中变量的引用。当你在列表中改变的时候,你所指的只是你所指的东西。最好的解释是follow it visually-逐步检查在该链接上找到的执行可视化,它应该非常清楚。在

请注意,可变对象可以在适当的位置发生变化,这将影响列表(因为对象本身将发生更改,而不仅仅是您正在使用的名称所指向的名称)。有关比较,请参见the visualization here。在

这里最好的选择是list comprehension。在

new_list = [num + 1 for num in old_list]

可以通过索引数组来实现这一点。在

>>> list=[1,2,3,4,5]
>>> for i in range(len(list)): 
...  list[i]=list[i]+1

这将避开Lattyware提到的引用问题。在

这是python中赋值如何工作的一个工件。当你做作业时:

name = something

获取对象something(它是计算右手边的结果)并将其绑定到本地命名空间中的名称name。执行for循环时,获取对循环中元素的引用,然后通过向旧对象添加1来构造新对象。{cd4>在当前名称空间中给你赋值。在

如果原始列表中的对象是可变的,则可以在for循环中对对象进行变异:

^{pr2}$

你会在原始列表通知中看到这些变化,但是我们没有在这里做任何作业。在

当然,正如lattyware建议的那样,您可以使用列表理解来构建新列表:

new_list = [x+1 for x in old_list]

你甚至可以让任务发生在适当的地方:

old_list[:] = [x+1 for x in old_list]

相关问题 更多 >