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"
我无法理解该怎么做?
答案 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]