【问题标题】:Unexpected error: "IndexError: list index out of range" when trying to access a list within a function意外错误:尝试访问函数内的列表时出现“IndexError:列表索引超出范围”
【发布时间】:2021-12-30 23:57:06
【问题描述】:
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很陌生。以上是我编写的代码,它接受一个列表作为输入,并返回一个元组,其中包含最高数字的索引和最高数字本身。

由于某种原因,我在第 5 行收到“IndexError:list index out of range”,其中“maxx=L[0]”

任何帮助将不胜感激

【问题讨论】:

  • 你传递了一个空数组,所以它在索引 0 上没有任何内容

标签: python list function tuples index-error


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

       print(myMax([]))
    

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

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

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

    通过这种方式,您将不会尝试越界访问,并且您有一个表示发生错误的返回代码。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2018-04-30
    • 1970-01-01
    • 2017-07-02
    • 2018-04-22
    相关资源
    最近更新 更多