为何while循环执行print(A[i])会触发list index out of range错误?
问题分析:列表索引越界原因
你的代码如下:
A = [1,2,3,4,5] i = 0 while i < len(A) : i += 1 print(A[i])
核心原因:循环判断与索引操作的时序错配
Python列表的索引从0开始,你的列表A长度为5,有效索引范围是0到4(对应元素1到5)。我们拆解循环的每一步:
- 初始
i=0,满足i < 5的条件,进入循环:i自增为1,打印A[1](元素2) i=1,满足i <5,进入循环:i自增为2,打印A[2](元素3)i=2,满足条件:i自增为3,打印A[3](元素4)i=3,满足条件:i自增为4,打印A[4](元素5)i=4,仍然满足i <5,进入循环:i自增为5,此时尝试访问A[5]——但列表A不存在索引为5的元素,直接触发list index out of range错误。
简单来说:循环条件只判断了进入循环前的i是否小于列表长度,但进入循环后先执行i+=1,当i原本是4时,自增后变成5,超出了列表的有效索引范围。
而调换i+=1和print顺序后,会先打印当前i对应的元素,再自增i:当i到4时,打印完A[4],i变成5,下一次循环判断5 <5不成立,循环正常结束,不会触发越界。
内容的提问来源于stack exchange,提问作者vv vvv
相关产品推荐
相关产品推荐

