Python 3列表相邻元素比较报错求助:索引越界但结果符合预期
解决列表索引越界问题
嘿,我来帮你搞定这个报错!你遇到的IndexError: list index out of range是因为循环范围没处理对。
报错原因分析
你的list1有6个元素,索引范围是0-5。而range(len(list1))会生成0,1,2,3,4,5这6个索引值。当循环到最后一次(i=5)时,你尝试访问list1[i+1]也就是list1[6],这显然超出了列表的有效索引范围,所以触发了报错。
虽然前面的循环已经把符合条件的元素成功追加到list2里了,所以你单独查看list2能得到预期结果,但最后一次循环的报错必须修复。
修复方案
这里有两种简单的解决方法,都是基础Python语法,不用任何库:
方法1:调整循环范围
直接把循环的结束位置改成len(list1)-1,这样i的最大值就是4,i+1就是5,刚好是list1的最后一个索引,不会越界:
list1 = [5,9,3,2,7,11] list2 = [] for i in range(len(list1)-1): # 这里改成len(list1)-1 if list1[i] < list1[i+1]: list2.append(list1[i+1]) print(list2) # 输出: [9,7,11]
方法2:用zip配对相邻元素(更Pythonic)
这种方法不需要手动处理索引,直接把list1和它的切片list1[1:]配对,每次循环拿到前一个元素和当前元素,逻辑更清晰:
list1 = [5,9,3,2,7,11] list2 = [] for prev_num, curr_num in zip(list1, list1[1:]): if curr_num > prev_num: list2.append(curr_num) print(list2) # 输出: [9,7,11]
两种方法都能得到你想要的结果,而且不会再触发索引越界的报错。
内容的提问来源于stack exchange,提问作者dealwithit
相关产品推荐
相关产品推荐

