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

为何两种相似的Python for循环执行结果存在差异?

两种Python列表循环方式的执行差异解析

代码示例与输出

Code 1

>>> L=[0,1,2,3]
    for i in range(len(L)):
        print(f"Counter {i}")
        for j in range(len(L)):
            print(j)
            if len(L)==4:
                L.remove(2)
                L.remove(3)
            else:
                pass

输出:

Counter 0
0
1
2
3
Counter 1
0
1
Counter 2
0
1
Counter 3
0
1

Code 2

>>> L=[0,1,2,3]
    for i in L:
        print(f"Counter {i}")
        for j in L:
            print(j)
            if len(L)==4:
                L.remove(2)
                L.remove(3)
            else:
                pass

输出:

Counter 0
0
1
Counter 1
0
1

差异原因解析

1. for i in range(len(L))的执行逻辑

range(len(L))在循环启动前会被一次性计算完成。初始时L长度为4,range(4)会生成固定的序列[0,1,2,3],这个序列不会因为后续L的修改而改变。所以哪怕内层循环修改了L的长度,外层循环依然会遍历完这4个数值,因此会执行4次。

2. for i in L的执行逻辑

这种循环是直接遍历列表的迭代器。Python在循环开始时会创建列表的迭代器,但迭代器会实时响应列表的动态变化:

  • 初始时L是[0,1,2,3],迭代器先取出第一个元素0,执行外层循环体;
  • 内层循环中L被修改为[0,1];
  • 当外层循环要取下一个元素时,迭代器会基于当前的列表状态继续遍历,此时列表只剩0和1,迭代器取出1后就到达了列表末尾,循环终止,因此外层循环仅执行2次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:00:54