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)
与其他答案一样,i
从 a
中获取值,即 [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]
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)
与其他答案一样,i
从 a
中获取值,即 [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]