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

A-Level计算机科学插入排序代码报IndexError: list index out of range如何修复

插入排序IndexError: list index out of range 报错修复方案

错误原因

你代码里存在三个核心逻辑错误直接导致索引越界:

  1. 循环范围设置错误
    for index in range (len(numbers)) 中index的最大值为len(numbers)-1,此时执行index + 1刚好等于列表长度,而Python列表的合法索引范围是0 ~ len(列表)-1,直接访问index + 1位置就会触发越界报错。
  2. 索引和元素值混淆
    你把nextposition赋值为numbers[index + 1],这是列表的元素值,但后续代码全部把nextposition当成索引来使用(比如numbers[nextposition]),一旦元素值大于等于列表长度,必然触发越界。
  3. 插入排序的移位交换逻辑完全错误,不符合算法规则。

修复后可运行代码

numbers = [12,10,16,11,20]

def InsertionSort(numbers):
    # 插入排序默认第一个元素为有序区,从第二个元素开始处理
    for i in range(1, len(numbers)):
        # 保存当前待插入的元素值
        current_value = numbers[i]
        # 前序有序区的最后一个元素索引
        pre_index = i - 1
        
        # 前序元素比当前值大的话,就把前序元素往后移
        while pre_index >= 0 and numbers[pre_index] > current_value:
            numbers[pre_index + 1] = numbers[pre_index]
            pre_index -= 1
        # 把当前值插入到空出来的位置
        numbers[pre_index + 1] = current_value
    
    print(numbers)
    return numbers

InsertionSort(numbers)

修改说明

  • 循环起始点从1开始,避免访问索引超过列表范围
  • 区分保存待插入元素值和前序索引,不会再出现把值当索引用的错误
  • 调整为标准插入排序的移位逻辑,不需要多次交换元素,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:18:04