Python for循环中用列表索引作循环变量的运行逻辑解析
Python代码运行逻辑解析
待解释的代码如下:
a = [1, 2, 3, 4] for a[-1] in a: print(a)
代码运行输出:
[1, 2, 3, 1] [1, 2, 3, 2] [1, 2, 3, 3] [1, 2, 3, 3]
核心规则说明
- Python执行
for 目标 in 可迭代对象循环时,会先为可迭代对象生成迭代器:对于列表类型,迭代规则是按索引从0到列表末尾依次取值,总迭代次数和循环启动时的列表长度一致,本例中初始列表长度为4,固定执行4次循环。 - 每轮循环的赋值逻辑是:将当前迭代取出的元素,赋值给
in前面定义的目标。本例中目标不是独立变量,而是a[-1]即列表a的最后一个元素,每次赋值都会直接修改原列表的最后一位的值。
逐轮循环过程
循环启动前初始状态:a = [1, 2, 3, 4],迭代器确定要依次取索引0、1、2、3四个位置的元素。
- 第一轮:取出索引0位置的元素
1,赋值给a[-1](即索引3位置),a变为[1, 2, 3, 1],打印得到第一行结果。 - 第二轮:取出索引1位置的元素
2,赋值给a[-1],a变为[1, 2, 3, 2],打印得到第二行结果。 - 第三轮:取出索引2位置的元素
3,赋值给a[-1],a变为[1, 2, 3, 3],打印得到第三行结果。 - 第四轮:取出索引3位置的元素,此时该位置的值已经在上一轮被修改为
3,将3赋值给a[-1](即索引3位置本身),a无变化,仍为[1, 2, 3, 3],打印得到第四行结果。
易错点提示
不要误以为最后一轮迭代能取到初始值4:第三轮迭代时已经将列表最后一位修改为3,等迭代走到索引3位置时,取到的是修改后的值3,因此整个输出过程不会出现初始值4。
内容的提问来源于stack exchange,提问作者Shivam Dogra
相关产品推荐
相关产品推荐

