我究竟做错了什么?它显示列表索引超出范围

时间:2019-05-29 08:23:35

标签: python loops range

我有一个给定的列表,我想将该列表中具有奇数索引的所有元素添加到新列表中。这是我的代码:

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

我在做什么错了?

4 个答案:

答案 0 :(得分:0)

您可能要使用索引而不是值本身。列表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]))

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

您可以按如下方式对列表进行切片:

lst[1::2]

一般语法为:

list[start:end:step]

答案 3 :(得分:0)

在列表理解[lst[i] for i in lst if (i + 2) % 2 != 0]中,您遍历列表中的项目,如果i + 2为奇数,则尝试从具有相应索引i的原始列表中获取元素。

如其他答复中所述,您可以使用枚举来访问索引和元素。

或者您可以简单地使用切片

>>> foo = [1, 2, 3, 4, 5]
>>> foo[1::2]
[2, 4]