Unexpected error: "IndexError: list index out of range" when trying to access a list within a function

Unexpected error: "IndexError: list index out of range" when trying to access a list within a function

def myMax(L):
    print(L)
    f=len(L)
    ind=0
    maxx=L[0]
    for i in range(len(L)):
        if L[i]>maxx:
             maxx=L[i]
             ind=i
    return (ind,maxx)
print(myMax([1, 2, -9, 10]))
print(myMax([]))   

我对 python 很陌生。上面是我编写的代码,它将一个列表作为输入,returns 一个具有最高数字索引和最高数字本身的元组。

出于某种原因,我在第 5 行收到“IndexError:列表索引超出范围”,其中“maxx=L[0]”

如有任何帮助,我们将不胜感激

您将空列表 : myMax([]) 传递给函数并指向此空列表 L[0] 的第一个元素。您需要检查列表 L 是否不为空。

将以下内容添加为函数的第一行将帮助您防止 None 或空列表

if L is None or len(L) == 0:
  raise ValueError('Input list can not be None or empty')

因为您是在代码最后一行的空列表上调用该函数。

   print(myMax([]))

您传递给 myMax 函数的参数是长度为零的 []。 当您调用第五行时,您实际上是在尝试访问列表的第一个元素,它确实存在。事实上 Python 中的列表是从 0 到 n - 1 的索引,其中 n 是列表的大小。

默认情况下,当您尝试访问其不包含的索引上的数组时,解释器会引发异常 IndexError: list index out of range。有几种方法可以处理这种情况,例如 try except 控件,但在您的情况下,由于 returning 一个整数中的函数,我建议您在最后添加一个控件为了 return -1 在这种情况下。

    def myMax(L):
        if len(L) == 0:
            return -1
        # your code here

这样您就不会尝试越界访问,并且您有一个 return 代码表示发生了错误。