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

Python自定义列表排序函数报IndexError:如何修复并实现升序排序

问题分析与修复方案

1. 索引越界错误原因

循环for j in range(len(num))会让j取到len(num)-1,此时j+1等于len(num),超出了列表的最大索引(列表索引从0开始,最大索引为len(num)-1),因此触发IndexError。

2. 返回值错误

函数最后return my_list是返回函数对象本身,而非排序后的列表,应该返回处理后的num。

3. 优化冒泡排序循环次数

原代码的rep=len(num)//2+1不是标准冒泡排序的合理循环次数,冒泡排序只需循环len(num)-1次——每一轮都会把当前最大的元素“冒”到列表末尾,后续轮次无需再比较已排好序的末尾元素。

修复后的完整代码

def my_list(num):
    # 冒泡排序最多需要 len(num)-1 轮循环
    for i in range(len(num)-1):
        # 每轮只需比较到未排序的最后一个元素,减少重复比较
        for j in range(len(num)-1 - i):
            if num[j] > num[j+1]:
                # 交换两个元素位置
                temp = num[j]
                num[j] = num[j+1]
                num[j+1] = temp
    # 返回排序后的列表
    return num

x = my_list([1,10,5,7])
print(x)  # 输出: [1, 5, 7, 10]

代码说明

  • 外层循环range(len(num)-1):确保所有元素完成排序,最多需要n-1轮(n为列表长度)。
  • 内层循环range(len(num)-1 -i):每完成一轮,末尾i个元素已处于有序状态,无需重复比较,提升效率。
  • 元素交换:通过临时变量temp完成两个元素的位置互换,实现升序排序。
  • 返回值修正:改为返回排序后的列表num,而非函数对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:45:11