简单循环中出现IndexError的原因咨询
问题解答
先看你的代码:
a=[] for i in range(1,5): b = i**3 a.append(b) for i in range(1,5): print(a[i])
第一个疑问:为什么第二个循环到i=4时会触发索引越界?
Python的列表索引是从0开始计数的。第一个循环中,range(1,5)会生成1、2、3、4四个值,所以a最终会被填充为[1, 8, 27, 64]——这个列表的有效索引是0、1、2、3,最大索引是3。
第二个循环里,i同样取1、2、3、4:
- 当
i=1,访问a[1],对应值8; i=2,访问a[2],对应值27;i=3,访问a[3],对应值64;i=4,访问a[4],但列表a根本没有索引为4的元素,所以触发IndexError。
你误以为是访问a[5],其实是a[4],因为循环的最后一次迭代i等于4。
第二个疑问:i=1时无报错,是不是因为a[1]被赋值为NULL?
完全不是。a[1]的值是8(也就是2的三次方),是被正常赋值的。Python里没有NULL这个概念,对应的空值是None,但这里a的每个元素都是通过i**3计算出来的有效值。你看到输出8 27 64,就是i=1、2、3时打印的结果,直到i=4才会报错。
内容的提问来源于stack exchange,提问作者hurreechunder
相关产品推荐
相关产品推荐

