IndexError - 使用Python 3.4.3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IndexError - 使用Python 3.4.3相关的知识,希望对你有一定的参考价值。

我正在尝试为一个小程序编写代码,该程序将列表作为输入并返回一个布尔值,指示是否有任何连续重复的数字(列表必须至少有2个元素)。我一直收到以下错误:

IndexError: list index out of range.

任何关于如何解决这个问题的建议将不胜感激!

def two_length_run(n):

    i = 0

    while i < len(n):
        if len(n) >= 2:
            if (n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
                return True
            else:
                i = i + 1
        else:
            return False
答案
  1. 根据列表的长度检查下一个元素没有帮助;你需要检查下一个索引......
  2. ...并在访问元素之前执行此操作。
  3. 你需要防止它走出界限。长度为k的列表的索引为0:(k-1),但是您的测试允许i+1运行到k的值,这会导致您的访问超出范围。

新检查:注意从<=<的更改,并撤消订单。

if i + 1 < len(n) and n[i] == n[i+1]:

“短路”确保如果第一个条件为假,则不会评估第二个条件。

您可以使用for循环更轻松地完成此操作,这有助于将您的idex保持在界限内:

if len(n) >= 2:

    for i in range(len(n)-1):
        if n[i] == n[i + 1]:
            return True           # Exit early if you find a pair

return False    
另一答案

我会这样写:

def two_length_run(n):
    if not n or len(n) < 2:
        return False
    for i in xrange(len(n) - 1):
        if n[i] == n[i+1]:
            return True 
    return False

在开始迭代和使用xrange之前进行检查(快速退出),而不是手动增加“i”。

另一答案
def two_length_run(n):
    i = 0
    while i < len(n):
        if len(n) >= 2:
            if (i + 1 < len( n )) and ( n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
                return True
            else:
                i = i + 1
        else:
            return False

当i = len(n) - 1时,内部if条件可能由于i + 1而溢出,所以在那里添加一个检查。

另一答案

您的循环检查当前索引和下一个索引,因此您的while条件不正确。

代替

while i < len(n):
    if len(n) >= 2:

运用

if len(n) > 1:
    while i < len(n) - 1:
        if n[i] == n[i + 1]:
            return True
        i = i + 1

# Checked every index of n without a duplicate
return False

将避免此索引错误。

另一答案

你得到的答案似乎是正确的。但是,我认为将条件放在while语句中会更清晰。

def two_length_run(n):

    i = 0

    while i < len(n) - 1:
        if len(n) >= 2:
            if (n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
                return True
            else:
                i = i + 1
        else:
            return False

我认为这应该有效

以上是关于IndexError - 使用Python 3.4.3的主要内容,如果未能解决你的问题,请参考以下文章

Python - 警告:意外错误:<class 'IndexError'>

python 3.6 在使用 sys.argv 时显示 IndexError

IndexError:列表索引超出范围 - python 错误

python字符串格式抑制/静默keyerror/indexerror [重复]

如何在python中修复“IndexError:元组索引超出范围”?

KeyError:“likeCount”和IndexError:Python中的列表索引超出范围