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

Python查找首个非连续元素时遇IndexError: list index out of range求助

解决首个非连续元素查找的索引越界问题

首先,咱们先拆解你代码里的核心问题:

  1. 循环变量用错了:你用for n in arr时,n是数组里的元素值,不是索引!但你后面写了arr[n + 1],这会导致当n是数组最后一个元素时,n+1远超过数组的最大索引,直接触发IndexError。比如全连续数组[1,2,3,4,5],最后一个n是5,arr[5+1]就是访问第6个元素,而数组只有5个元素,肯定越界。
  2. 逻辑判断偏离需求:题目要求返回首个非连续的元素(比如[1,2,3,4,6]里的6),但你的代码里if n + 1 not in arr: return n + 2完全不符合需求,而且elif里直接return会导致循环提前终止,根本没法遍历完整个数组。

修正后的代码思路

正确的做法是遍历数组的索引,依次比较当前元素和下一个元素是否连续:

  • 遍历范围从索引0到倒数第二个元素(避免访问最后一个元素的下一个位置)
  • 如果当前元素+1不等于下一个元素,直接返回下一个元素
  • 如果遍历完所有相邻元素都连续,返回None

修正后的代码

def first_non_consecutive(arr):
    # 遍历索引,从0到len(arr)-2(保证能访问到i+1的位置)
    for i in range(len(arr) - 1):
        current = arr[i]
        next_num = arr[i+1]
        if current + 1 != next_num:
            return next_num
    # 所有元素都连续,返回None
    return None

测试验证

  • 测试非连续数组:first_non_consecutive([1,2,3,4,6,7,8,9]) 返回6,符合预期
  • 测试全连续数组:first_non_consecutive([1,2,3,4,5,6,7,8]) 返回None,不会再触发索引越界错误

额外说明

你之前用n + 1 not in arr的写法还有效率问题:in操作在列表里是O(n)时间复杂度,当数组很大时会很慢,而直接通过索引比较是O(1),效率高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:18:23