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

Python初学者问题:为什么该代码运行后输出[1,1,1,1,2,3]?

问题原因拆解

核心逻辑是range(len(my_list))的取值会在循环启动前一次性计算完成,后续列表长度变化不会更新循环的遍历序列。

逐次运行步骤

初始状态:
my_list = [1,2,3]
循环启动前计算len(my_list)得到3,因此range(3)生成固定的遍历序列:0,1,2,循环只会执行3次,v的取值固定为这三个值,和后续列表长度变化无关。

  1. 第一次循环,v=0
    取my_list[0]的值为1,插入到索引1的位置,插入后列表变为[1,1,2,3]
  2. 第二次循环,v=1
    取当前my_list[1]的值为1,插入到索引1的位置,插入后列表变为[1,1,1,2,3]
  3. 第三次循环,v=2
    取当前my_list[2]的值为1,插入到索引1的位置,插入后列表变为[1,1,1,1,2,3]

三次循环执行结束后打印列表,就得到你看到的输出结果。

为什么没有遍历到原列表的2、3

你每次插入操作都在索引1的位置插入元素,会把原列表后续元素的索引不断往后挤,而循环的v最大值只有2,永远取不到原列表中2、3对应的后续索引,自然不会遍历到这两个值。
如果需要遍历原列表的所有元素,建议提前复制一份原始列表的副本用来取值,不要直接修改正在参与长度计算的列表本身。


内容的提问来源于stack exchange,提问作者Carl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:39:03