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

为何Python for循环中range外层循环先执行两次才进入内层循环?

为什么外层循环先执行两次,内层循环才开始运行?

别被输出的表象骗啦!你看到的「外层循环先跑两次」,其实是第一次外层循环的内层循环根本没执行任何迭代,不是外层真的触发了两次才启动内层。咱来拆解下代码里的关键细节:

首先看你的代码:

def sort(a_list):
    for i in range(1, len(a_list)):
        print("i=", i)
        for j in range(i-1, 0, -1):
            print("j=", j)

测试用例:

L = [9,6,1,3]
sort(L)

核心原因:range()生成空序列导致内层循环跳过

Python的range(start, stop, step)有个规则:如果起始值和结束值的关系不符合步长走向,或者起始值等于结束值,生成的就是空序列,循环不会执行。

  • 当i=1时,内层循环的range(i-1, 0, -1)等价于range(0, 0, -1)——起始值和结束值都是0,所以生成空序列,内层循环直接跳过,没有任何j=的输出,直接进入外层循环的下一次迭代。
  • 当i=2时,内层循环变成range(1, 0, -1),步长为-1,从1往0走(不包含0),生成序列[1],所以内层循环执行一次,打印j=1。
  • 当i=3时,内层循环是range(2, 0, -1),生成[2,1],所以依次打印j=2和j=1。

还原真实的运行顺序(带换行的正常输出)

你的原始运行结果可能是复制时格式错乱了,实际正常运行的输出应该是这样的:

i= 1
i= 2
j= 1
i= 3
j= 2
j= 1

这样就能清晰看到:i=1的外层循环跑完后,因为内层没执行,直接到i=2的外层循环,这时候内层才第一次启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:51