You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:50:25