小编典典

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

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]。

我知道我可以通过解决这个问题

>>> newlist=[] 
>>> for num in list: 
...  newlist.append(num+1)
... 
>>> newlist
[2, 3, 4, 5, 6]
>>>

但是必须有一种更简单的方法。


阅读 449

收藏
2021-01-20

共1个答案

小编典典

这是因为您仅获得列表中变量的引用。替换它时,只需更改该引用指向的内容,因此列表中的项目保持不变。对此的最佳解释是直观地进行跟踪-逐步执行该链接处的执行可视化,并且应该非常清楚。

请注意,可变对象可以在适当位置进行突变,这将影响列表(因为对象本身将发生变化,而不仅仅是您正在使用的名称指向的对象)。为了进行比较,请参见此处的可视化

最好的选择是列表理解

new_list = [num + 1 for num in old_list]
2021-01-20