IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字

Posted

技术标签:

【中文标题】IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字【英文标题】:IndexError: list index out of range , while finding the first non-consecutive number in a list in python 【发布时间】:2020-11-29 14:40:00 【问题描述】:

我是编码新手,正在 python 中解决代码战问题。任务是在一个列表中找到第一个不连续的元素并返回它([1,2,3,4,6,7,8,9]应该返回6),如果它们都是连续的,则返回None。我已经对其进行了编码,以便它正确地完成它应该做的事情,并且我已经通过了所有测试但无法完成,因为我有退出代码这样说:

Traceback (most recent call last):
   File "main.py", line 5, in <module>
      Test.assert_equals(first_non_consecutive([1,2,3,4,5,6,7,8]), None)
   File "/home/codewarrior/solution.py", line 5, in first_non_consecutive
      elif n + 1 == arr[n + 1]:
IndexError: list index out of range

我以前遇到过这个问题,这很烦人,因为大多数时候我的代码正确地完成了它应该做的事情,但出于某种原因,这种情况发生了。

这是我的代码:

def first_non_consecutive(arr):
    for n in arr:
        if n + 1 not in arr:
            return n + 2
        elif n + 1 == arr[n + 1]:
            return

我该怎么办?

【问题讨论】:

n 不是列表索引,它是列表元素。为什么要使用arr[n+1] 只是为了解释你的错误。超出范围的索引意味着您的列表以 3 个元素结尾,并且您要求的是第 10 个元素。 (直觉) 即使是索引,当你到达最后一个索引时,n+1 也会在外面。 【参考方案1】:

问题描述给出提示:

不连续是指不完全比数组的前一个元素大 1。

您可以简单地循环并找到不比前一个元素大 1 的第一个元素:

def first_non_consecutive(arr):
    # start from 1 instead of 0 since the first element must be consecutive
    for i in range(1, len(arr)):
        # literally check if it's equal to the previous element plus one
        if arr[i] != arr[i - 1] + 1:
            return arr[i]
    # didn't find a match so return None
    # default return value is None so this line isn't technically needed
    return None

您之前的解决方案不起作用,因为 n 是数组中的一个值,而不是索引,并且您试图用它来索引数组,这意味着数组的值大于索引,例如[100],将导致它尝试读取不存在的元素。

【讨论】:

以上是关于IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字的主要内容,如果未能解决你的问题,请参考以下文章

IndexError: List Index out of range Keras Tokenizer

IndexError: list index out of range 现在我已经改变了文件的读取方式

python-爬取中国大学排名网站信息IndexError:list index out of range

python-爬取中国大学排名网站信息IndexError:list index out of range

关于Python一直提示IndexError: list index out of range是怎么回事?

IndexError: list index out of range ,同时在python的列表中查找第一个不连续的数字