IndexError:列表索引超出范围 - 在Python中抛出错误?

时间:2016-03-14 09:21:41

标签: python list error-handling append indexoutofboundsexception

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"

我无法理解该怎么做?

8 个答案:

答案 0 :(得分:3)

当您执行for i in a时,您正在迭代a元素,而不是索引!

您正尝试访问:a[1]然后a[4]然后a[9]然后a[16] ->这是导致{{{ 1}}。

如果您只想对索引进行迭代,请尝试:

IndexError

如果您需要值和索引,请使用>>> for i in range(len(a)): if a[i] % 2 == 0 : l.append(a[i]) >>> print (l) [4, 16, 36, 64, 100]

答案 1 :(得分:3)

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

答案 2 :(得分:1)

有一些方法:

snapshot

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)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

与其他答案一样,i获取a的{​​{1}}值[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]i取值“16”的循环中,a[i]将超出范围!! (16 > len(a)

进行调试我总是建议打印......
在这种情况下,如果您在循环中打印i的值,您将自己找到问题

答案 7 :(得分:0)

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:

索引错误,因为数组中最大的索引是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]