You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:01:19