2016-02-26 2 views
1

Итак, я нахожусь в классе программирования, и у меня есть назначение, где мне нужно взять список в качестве параметра, а затем вернуть список только с валами из первого списка, делятся на 6. Класс использует Python, и это то, что я думаю, должно работать, но я продолжаю получать ошибку.IndexError: индекс за пределами диапазона: 5

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 плюс последний индекс. Поэтому я понимаю, что он пытается проверить и индексировать, чего нет в списке, я просто не вижу, что мой код пытается вызвать прошлый индекс данной строки.

Спасибо!

+1

'youAndThe6th = lambda x: [y для y в x, если y% 6 == 0]' – Ananth

ответ

3

Первое список первых питон равны нулю проиндексированы что они начинаются с 0

Modified Код:

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

Вашей проблема в строке 4. Вместо

if nums[x]%6 == 0: 

вы должны иметь

if x%6 == 0: 

То, что происходит в том, что ваш для заявления уже дают вам значение, хранящееся в списке (как x). Затем вы пытаетесь принять x-мерное значение списка, и в вашем случае ваш список имеет только 4 значения, поэтому запрос значения 4 выходит за пределы диапазона (поскольку python начинает подсчет с 0).