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

Python列表去重:两段实现代码的效率对比咨询

两段去重代码的效率对比分析

首先直接给结论:第二段使用新列表存储结果的代码效率明显更高,下面具体拆解原因:

第一段代码的效率问题

先看这段代码的逻辑:

List = [5,2,9,1,7,2,2,3,9]
for item in List:
    while(List.count(item) >= 2):
        List.remove(item)
print(List)

它的核心问题在于重复的高耗时操作:

  • List.count(item):每次调用都会完整遍历整个列表来统计元素出现次数,时间复杂度是O(n)
  • List.remove(item):找到第一个匹配元素后删除,删除时还要移动后面所有元素的位置,同样是O(n)的操作
  • 对于重复多次的元素(比如例子里的2出现了3次),会多次触发count和remove——比如第一次删除2后,还要再做一次count检查,再删除一次,等于对同一个元素反复执行两次O(n)的操作,整体时间复杂度会达到O(n²)甚至更高,列表越长、重复元素越多,效率下降得越明显。

另外还有个隐性问题:在遍历列表的同时修改原列表(remove操作),可能会导致遍历跳过某些元素,不过你说这段代码能正常运行,可能例子里的情况刚好没触发,但这也是个潜在风险。

第二段代码的效率优势

再看这段代码:

List = [5,2,9,1,7,2,2,3,9]
New_List = []
for item in List:
    if item not in New_List:
        New_List.append(item)
print(New_List)

它的逻辑是遍历原列表一次,把未出现过的元素加入新列表:

  • 只需要遍历原列表一次,每个元素仅处理一次
  • 虽然item not in New_List也是遍历新列表的操作(O(k),k是新列表当前长度),但整体是单次遍历加线性检查,时间复杂度是O(n²),但实际运行效率比第一段高很多——因为它不会对同一个元素反复执行多次全列表扫描,避免了大量重复的耗时操作。

额外优化建议(可选)

如果想要更高效率的去重(同时保持原元素顺序),Python 3.7及以上版本可以利用字典的有序性,实现O(n)时间复杂度的去重:

List = [5,2,9,1,7,2,2,3,9]
New_List = list(dict.fromkeys(List))
print(New_List)

字典的键查找是O(1)操作,所以整体只需要遍历一次原列表,效率是最高的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:32