Python中为何无法直接遍历列表元素实现逐个加1?正确写法解析
为什么给列表元素加1的两种写法结果不同?
先看原始列表:
values = [16, 1, 7, 2, 19, 12, 5, 20, 2, 10, 10, 14, 17, 14, 1, 16, 19, 7, 9, 19]
当我们想给列表里每个元素加1时,第一种写法完全不起作用:
无效的写法
for i in values: i += 1 print(values)
原因:
这里的i是列表元素的临时副本。循环时Python会把列表当前元素的值复制给i,你对i执行的+=1操作,只是修改了这个临时变量的数值,根本没触及原列表里的元素。循环结束后,原列表values自然没任何变化。
而第二种写法能实现需求:
有效的写法
for i in range(len(values)): values[i] += 1 print(values)
原因:
这种写法是通过索引直接操作原列表元素。range(len(values))生成了列表所有元素的索引,循环时用values[i]直接定位到原列表中第i个位置的元素,对它做+=1时,是直接修改原列表对应位置的元素值,所以循环结束后每个元素都成功加1。
另外,还有更简洁的Python风格写法——列表推导式,效果完全一致:
values = [x + 1 for x in values]
内容的提问来源于stack exchange,提问作者Jason Lin
相关产品推荐
相关产品推荐

