执行Python列表遍历删除代码后输出为[10,10],求原因解析
遍历列表时删除元素为何会残留部分值?
先看你的代码:
l = [10,10,10,10] for x in l: l.remove(x) print(l)
输出是[10,10],核心原因是Python的for循环基于列表迭代器遍历,而你在遍历过程中直接修改了列表长度,导致迭代器的索引逻辑混乱。
具体执行过程拆解:
- 初始列表:
l = [10,10,10,10],索引对应为0:10、1:10、2:10、3:10 - 第一次循环:迭代器取索引0的元素
10,执行l.remove(x)后,列表变为[10,10,10](删除第一个10后,后续元素向前移位) - 第二次循环:迭代器自动走到下一个索引(原索引1),此时该位置的元素是原列表索引2的
10,执行l.remove(x)后,列表变为[10,10] - 第三次循环:迭代器要走到原索引2,但此时列表长度已变为2,迭代器判定遍历完成,循环直接终止
所以最后剩下两个未被遍历到的10。
如果想要遍历并删除所有元素,正确的做法是遍历原列表的副本,比如:
l = [10,10,10,10] for x in l.copy(): l.remove(x) print(l) # 输出 []
或者直接用l.clear()清空列表,效率更高。
内容的提问来源于stack exchange,提问作者Vamsi Madugula
相关产品推荐
相关产品推荐

