【问题标题】:IndexError: list index out of range - throwing error in Python?IndexError:列表索引超出范围 - 在 Python 中抛出错误?
【发布时间】:2016-06-29 06:11:47
【问题描述】:
a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
l= []
for i in a:
    if a[i] % 2 == 0 :
        l.append(a[i])

上面的代码一直抛出错误 - "IndexError: list index out of range"

我不明白该怎么办?

【问题讨论】:

    标签: python list error-handling append indexoutofboundsexception


    【解决方案1】:
    a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    l= []
    for i in a:
        if a[i] % 2 == 0 :
            l.append(a[i])
    
    ...
    if a[1] % 2 == 0:
    ...
    if a[4] % 2 == 0:
    ...
    if a[9] % 2 == 0:
    ...
    if a[16] % 2 == 0:
    

    索引错误,因为数组a中最大的索引是9... 所以你必须使用这个:

    a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    l= []
    for i in a:
        if i % 2 == 0 :
            l.append(i)
    

    或者这个例子:

    a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    l= []
    for i in a:
        if i % 2 == 0 :
            l.append(i)
    

    或 1 行解决方案:

    a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    l= [x for x in a if x%2 == 0]
    

    【讨论】:

      【解决方案2】:

      与其他答案一样,i 采用来自a 的值,即[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      在循环中,当i 取值“16”时,a[i] 将超出范围!! (16 > len(a))

      为了调试,我总是建议打印...
      在这种情况下如果你在循环中打印i的值,你会自己发现问题

      【讨论】:

        【解决方案3】:

        当您迭代a 时,您查看的是值而不是该值在列表中的位置。

        你可以像这样使用这个值:

        a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        l= []
        for val in a:
            if val % 2 == 0 :
                l.append(val)
        

        或者,如果您同时需要位置和值,则可以使用enumerate 函数,如下所示:

        a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        l= []
        for pos, val in enumerate(a):
            if a[pos] % 2 == 0 :
                l.append(a[pos])
        

        【讨论】:

          【解决方案4】:

          您可以为您的任务使用过滤器

          a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
          print filter(lambda x: x % 2 == 0, a)
          

          【讨论】:

            【解决方案5】:

            列表综合可用于使其成为单行 l=[x for x in a if x%2==0] 正如其他答案中所述,您的问题是您使用列表项作为其索引。

            【讨论】:

              【解决方案6】:

              您可以为此使用list comprehension

              a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
              l = [i for i in a if i%2 == 0]
              
              print(l)
              [4, 16, 36, 64, 100]
              

              【讨论】:

                【解决方案7】:

                当您执行for i in a 时,您正在迭代a元素,而不是索引!

                您正在尝试访问:a[1],然后是 a[4],然后是 a[9],然后是 a[16]->,这是导致 IndexError 的原因。

                如果您只想迭代索引,请尝试:

                >>> for i in range(len(a)):
                        if a[i] % 2 == 0 :
                            l.append(a[i])
                
                
                >>> print (l)
                [4, 16, 36, 64, 100]
                

                如果您需要值和索引,请使用for index, value in enumerate(a):

                【讨论】:

                  【解决方案8】:

                  有一些方法:

                  for e in a:
                    if e % 2 == 0 :
                      l.append(e)
                  

                  for i in range(len(a)):
                    if a[i] % 2 == 0 :
                      l.append(a[i])
                  

                  for i, e in enumerate(a):
                    if e % 2 == 0 :
                      l.append(e)
                  

                  for i, e in enumerate(a):
                    if a[i] % 2 == 0 :
                      l.append(a[i])
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2018-04-22
                    • 2020-09-04
                    • 1970-01-01
                    • 2018-05-03
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多