Что я делаю неправильно?Это показывает мне, что индекс списка находится вне диапазона - PullRequest
0 голосов
/ 29 мая 2019

У меня есть заданный список, и я хочу добавить все элементы этого списка с нечетным индексом в новый список.Вот мой код:

def odd_indices(lst):
  new_lst = [ lst[i] for i in lst if (i + 2) % 2 != 0 ]
  return new_lst

Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 29 мая 2019

в понимании списка [lst[i] for i in lst if (i + 2) % 2 != 0] вы перебираете элементы в списке и пытаетесь получить элементы из исходного списка с соответствующим индексом i, если i + 2 нечетное.

, как упоминалось в других ответах, вы можете использовать перечисление для доступа к индексу и элементу.

или вы можете просто использовать нарезку

>>> foo = [1, 2, 3, 4, 5]
>>> foo[1::2]
[2, 4]
0 голосов
/ 29 мая 2019

Используйте enumerate для работы с индексом

>>> lst = [0,1,2,3,4,5,6,7,8,9,10]
>>> [value for index, value in enumerate(lst) if index%2 != 0]
[1, 3, 5, 7, 9] # output odd index values

В чем вы ошиблись?

  1. Перебор списка.
  2. На каждой итерации вы получите элемент этого списка.
  3. вы используете этот элемент в качестве индекса списка.

EX:

lst = [1,2,3,4,5,6,7,8,9,10] 

В приведенном выше lst последний элемент равен 10.

lst[10] ---> which does not exists. # Throws out of index range error
0 голосов
/ 29 мая 2019

Вы можете нарезать список следующим образом:

lst[1::2]

Общий синтаксис:

list[start:end:step]
0 голосов
/ 29 мая 2019

Возможно, вы захотите взять индекс вместо самого значения. Список lst содержит значения, а не индексы. enumerate помогает генерировать индексы. Делай как ниже.

def odd_indices(lst):
  new_lst = [ v for i, v in enumerate(lst) if i% 2 != 0 ]
  return new_lst


print(odd_indices([1, 2, 4, 5]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...