IndexError:索引超出范围:5

时间:2016-02-26 05:58:51

标签: python

所以我在一个介绍编程类中,我有一个赋值,我需要将列表作为参数,然后返回一个列表,其中只包含第一个列表中可被6整除的val。该类使用Python,这是我认为应该工作但我一直收到错误。

    def youAndThe6th(nums):
        numsNew =  []
        for x in nums:
            if nums[x]%6 ==0:
                numsNew.append(nums[x])
        return numsNew

然后当我运行类似的东西时:

     youAndThe6th([1,2,3,4])

我得到并且错误说" IndexError:索引超出范围:4"。而4只是1加上最后一个指数。所以我理解它正在尝试检查并索引列表中没有的内容,我只是不知道我的代码试图调用超过给定字符串的最后一个索引的内容。

谢谢!

2 个答案:

答案 0 :(得分:3)

首先,第一个python列表是零索引,它们从0开始

修改后的代码:

def youAndThe6th(nums):
    numsNew =  []
    for x in nums:
        if x%6 ==0:
            numsNew.append(x)
    return numsNew

修改后的代码范围:

def youAndThe6th(nums):
    numsNew =  []
    for x in range(len(nums)):
        if x%6 ==0:
            numsNew.append(x)
    return numsNew

或者我们可以使用列表理解

在我的观点中使事情变得更容易
numsNew =[x for x in nums if x%6 == 0]

备注:

  • 当你遍历一个列表时,你实际上是在循环它的内容,而不是它的索引你可以使用范围,如果你想要它的索引
  • 您的清单有四个要素 values = [ 1 , 2 , 3 , 4] index = 0 , 1 , 2 , 3 因此,当您在列表上进行迭代时,您获得了值4并且您执行了nums[x] == nums[4],因为列表只有索引最多3,因此它会抛出IndexError: index out of range: 4

答案 1 :(得分:1)

你的问题在第4行。而不是

if nums[x]%6 == 0:

你应该有

if x%6 == 0:

正在发生的事情是你的for语句已经为你提供了存储在列表中的值(如x)。然后你试图获取列表的第x个值,在你的情况下,你的列表只有4个值,所以要求值4超出范围(因为python从0开始计数)。