BBTJDDY 2022-12-27 21:57 采纳率: 100%
浏览 15
已结题

list out of range

问题遇到的现象和发生背景

冒泡排序的代码

遇到的现象和发生背景,请写出第一个错误信息

第二行报错list out of range

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
def bubble(x):
    for i in range(len(x)):
        for j in range(len(x)-i):
            if x[j] > x[j+1]:
                x[j],x[j+1] = x[j+1],x[j]
    return x
print(bubble([4,6,3,5,6,7,8,3,4,5]))
a = [2,3,4,5,6]

运行结果及详细报错内容

如上

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

但是当我把第二行改成for i in range(1,len(x))的时候结果是正确的,这两个有什么区别啊
后面我又多试了几次,好像只要第二行的range从0开始就会out of range

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

我想知道这是为什么,谢谢!

  • 写回答

3条回答 默认 最新

  • starlight_2007 2022-12-27 22:34
    关注

    如果第二行的range从0开始,那么第一次循环时的i值为0,则第三行的len(x)-i就等于原列表长度(即len(x) == len(x)-i)。这种情况下,第四行的j+1就会大于x的最后一个索引。
    总结一下,在第一次母循环(i=0)下的最后一次子循环(j=len(x)-1),j被赋值为len(x)-1,即x列表最大索引,此时j+1大于x列表最大索引,所以报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助