Python自定义sort()函数报IndexError列表索引越界如何解决
报错原因
代码触发IndexError: list index out of range的直接原因是循环边界设置错误:
当i等于len(liste)-1(也就是列表最后一个元素的索引)时,判断条件里访问了liste[i+1],此时索引值等于列表长度,超出Python列表合法索引范围(列表最大合法索引为长度减1)。
原有逻辑还存在两个隐藏问题:
- 相邻两个元素值相等时,既不触发交换分支,也不触发
i +=1的分支,会直接进入死循环 - 你当前实现的是交换后从头重遍历的冒泡排序雏形,边界错误会直接打断排序流程
修正代码
只需要调整循环终止条件,同时合并相等场景的分支逻辑即可:
liste = [10, 4, 9, 6, 11, 8, 1] i = 0 # 循环边界改为len(liste)-1,保证i+1永远是合法索引 while i < len(liste) - 1: if liste[i] > liste[i+1]: liste[i], liste[i+1] = liste[i+1], liste[i] i = 0 else: # 包含当前元素小于、等于下一个元素两种情况,直接后移指针 i += 1 print(liste)
运行后代码不会触发索引越界,最终会输出正确排序结果[1, 4, 6, 8, 9, 10, 11]。
注:如果要优化排序效率,可以改成标准冒泡排序实现,每轮遍历把当前最大值沉到列表尾部,逐轮缩短遍历范围,不用每次交换都从头开始检查,能减少大量无效遍历。
内容的提问来源于stack exchange,提问作者shadow_Marmot
相关产品推荐
相关产品推荐

