Python遍历列表时代码未报错却提前终止,原因何在?
代码提前终止的原因分析
你的代码在处理完'b'后就停止,核心问题是遍历列表的同时修改了列表本身的长度,导致for循环的迭代器提前耗尽。
具体过程拆解:
- 初始列表
A = ['a', 'a', 'b', 'b', 'a', 'c', 'd', 'b']长度为8,for ab in A的循环基于初始列表的迭代器逐个取元素。 - 第一次循环拿到
ab='a'时,A.count('a')返回3,执行3次A.pop(A.index('a'))移除所有'a',此时A变为['b', 'b', 'c', 'd', 'b'],长度缩为5。 - 循环继续推进,迭代器按初始列表的序列取后续元素,当处理到
ab='b'时,A.count('b')返回3,执行3次pop操作移除所有'b',此时A变为['c', 'd'],长度缩为2。 - 此时原迭代器已经推进到初始列表的第6个元素之后,当前A的长度仅为2,迭代器没有后续元素可取,循环直接终止,因此不会处理'c'和'd'。
另外代码存在变量名大小写不一致的bug:定义的是ab_list = list(),但后续调用的是Ab_list.append(...),会触发NameError,需要修正。
内容的提问来源于stack exchange,提问作者DHK
相关产品推荐
相关产品推荐

