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

求解析这段Python列表降序排序代码的执行逻辑

解析Python排序代码的执行逻辑

先看完整代码:

llist = [5, 2, 1, 4, 3]

for i in range(len(llist)):
    for j in range(i+1):
        if llist[j] < llist[i]:
            temp = llist[i]
            llist[i] = llist[j]
            llist[j] = temp

print(llist)

这段代码是降序排序的变体实现,核心逻辑是:每一轮外层i循环中,把当前i位置的元素,和它前面所有已处理过的元素(从0到i)逐一比较,如果前面的元素更小,就交换两者位置。最终每一轮结束后,前i+1个元素会保持从大到小的顺序。

下面逐轮拆解执行过程:

初始状态

列表:[5, 2, 1, 4, 3]


第1轮:i = 0

外层循环i取0,内层j循环范围是range(0+1)即[0],只执行1次:

  • j=0:比较llist[0](5)和自身,5 < 5不成立,不交换。
    列表无变化:[5, 2, 1, 4, 3]

第2轮:i = 1

外层i取1,内层j循环范围是range(1+1)即[0,1]:

  • j=0:比较llist[0](5)和llist[1](2),5 < 2不成立,不交换。
  • j=1:比较自身,无交换。
    列表无变化:[5, 2, 1, 4, 3]

第3轮:i = 2

外层i取2,内层j循环范围是range(2+1)即[0,1,2]:

  • j=0:llist[0](5)和llist[2](1),5 < 1不成立,不交换。
  • j=1:llist[1](2)和llist[2](1),2 < 1不成立,不交换。
  • j=2:比较自身,无交换。
    列表无变化:[5, 2, 1, 4, 3]

第4轮:i = 3

外层i取3,对应元素是llist[3] = 4,内层j循环范围是range(3+1)即[0,1,2,3]:

  1. j=0:llist[0](5)和4,5 < 4不成立,不交换。
  2. j=1:llist[1](2)和4,2 < 4成立,执行交换:
    • temp = 4,llist[3] = 2,llist[1] = 4
      列表变为:[5, 4, 1, 2, 3]
  3. j=2:此时llist[i]是2,llist[2]是1,1 < 2成立,执行交换:
    • temp = 2,llist[3] = 1,llist[2] = 2
      列表变为:[5, 4, 2, 1, 3]
  4. j=3:比较自身,无交换。
    本轮结束后列表:[5, 4, 2, 1, 3]

第5轮:i = 4

外层i取4,对应元素是llist[4] = 3,内层j循环范围是range(4+1)即[0,1,2,3,4]:

  1. j=0:llist[0](5)和3,5 < 3不成立,不交换。
  2. j=1:llist[1](4)和3,4 < 3不成立,不交换。
  3. j=2:llist[2](2)和3,2 < 3成立,执行交换:
    • temp = 3,llist[4] = 2,llist[2] = 3
      列表变为:[5, 4, 3, 1, 2]
  4. j=3:此时llist[i]是2,llist[3]是1,1 < 2成立,执行交换:
    • temp = 2,llist[4] = 1,llist[3] = 2
      列表变为:[5, 4, 3, 2, 1]
  5. j=4:比较自身,无交换。

最终结果

循环结束后,列表变为[5, 4, 3, 2, 1],也就是降序排列。

简单总结:每一轮i循环都会把当前i位置的元素,向前“插入”到前面已排序的降序列表中正确的位置——只要前面有比它小的元素,就交换位置,直到前面的元素都比它大,或者到列表开头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:01:26