IndexError: list index out of range - throwing error in Python?

IndexError: list index out of range - throwing error in Python?

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"

我不明白该怎么办?

当您执行 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):

当您遍历 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])

有一些方法:

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])

你可以使用 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]

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

您可以使用 过滤器 来完成您的任务:

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

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

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

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]