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的取值固定为这三个值,和后续列表长度变化无关。
- 第一次循环,v=0
取my_list[0]的值为1,插入到索引1的位置,插入后列表变为[1,1,2,3] - 第二次循环,v=1
取当前my_list[1]的值为1,插入到索引1的位置,插入后列表变为[1,1,1,2,3] - 第三次循环,v=2
取当前my_list[2]的值为1,插入到索引1的位置,插入后列表变为[1,1,1,1,2,3]
三次循环执行结束后打印列表,就得到你看到的输出结果。
为什么没有遍历到原列表的2、3
你每次插入操作都在索引1的位置插入元素,会把原列表后续元素的索引不断往后挤,而循环的v最大值只有2,永远取不到原列表中2、3对应的后续索引,自然不会遍历到这两个值。
如果需要遍历原列表的所有元素,建议提前复制一份原始列表的副本用来取值,不要直接修改正在参与长度计算的列表本身。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

