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

Python列表去重代码失效原因:为何无法得到预期结果?

代码无法正确去重的原因分析

1. 遍历列表时直接修改原列表,导致迭代跳过元素

Python的for循环遍历列表时,是按初始的索引顺序逐个取元素。当你在循环里调用num.remove(i)删除元素时,列表长度会变短,后续元素会往前移位填补空缺,但迭代器的索引不会回退,直接跳到下一个位置,这就导致部分元素根本没被遍历到。

举个具体执行步骤:

  • 原列表:[5, 7, 21, 7, 5, 7, 7, 5, 7 , 7]
  • 第一次循环取到5,因count(5)=3≠1,删除第一个5,列表变为[7, 21, 7, 5, 7, 7, 5, 7, 7]
  • 迭代器接下来访问索引1,取到的是21(原本的索引2元素),直接跳过了当前列表索引0的7,这个7永远不会进入循环处理。

2. 判断逻辑的漏洞:count(i)!=1的条件无法覆盖所有重复元素

当删除一个重复元素后,该元素的count值会减少,但因为部分元素被迭代跳过,剩下的重复元素不会被检查到。比如原列表中的7多次出现,被跳过的7没有进入循环判断,最后就会残留下来。

正确实现思路参考

如果要保留每个元素至少一个且维持原顺序,应该遍历原列表的副本,或者创建新列表存储结果:

num = [5, 7, 21, 7, 5, 7, 7, 5, 7 , 7]
result = []
for i in num:
    if i not in result:
        result.append(i)
print(result)  # 输出 [5, 7, 21],若需和期望顺序一致可调整逻辑

如果不关心元素顺序,直接用集合去重更简洁:list(set(num))

内容的提问来源于stack exchange,提问作者Abhinav Gajria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:21:02