【python】3个Python列表高效去重技巧:从基础到进阶(附性能对比)
3个Python列表高效去重技巧:从基础到进阶(附性能对比)
文章目录
前言:为什么写这篇?
最近整理开发笔记时,发现列表去重是 Python 初学者和进阶开发者都常遇到的问题 —— 看似简单的需求,不同实现方式的性能差异能达到 10 倍以上。今天把 3 种最实用的去重技巧整理出来,附上代码示例和性能测试,同时也有个小请求想拜托大家(文末说明~)
一、基础去重:set () 方法(最快上手)
这是最常见的去重方式,利用集合 “元素不可重复” 的特性,一行代码就能搞定:
# 基础去重(无序) old_list =[1,2,2,3,3,3,"a","a"] new_list =list(set(old_list))print(new_list)# 输出:[1, 2, 3, 'a'](顺序不确定)优点:代码简洁、执行速度快(底层 C 实现)
缺点:会打乱原列表顺序,且仅支持可哈希元素(不能去重包含字典、列表的列表)
适用场景:无需保留顺序、元素为数字 / 字符串 / 元组的场景
二、进阶去重:保留原顺序(Python 3.7+)
如果需要保留元素在原列表中的出现顺序,推荐用 dict.fromkeys() 方法 —— 字典在 Python 3.7 后会保留键的插入顺序:
# 保留顺序的去重 old_list =[2,1,3,2,4,1,5] new_list =list(dict.fromkeys(old_list))print(new_list)# 输出:[2, 1, 3, 4, 5](顺序与原列表一致)优点:保留原顺序、效率高于列表推导式
缺点:Python 3.7 以下版本不保证顺序
适用场景:需要维持元素原有顺序的开发场景
三、高阶去重:复杂场景(含条件过滤)
如果需要结合条件过滤去重(比如去重后保留大于 10 的元素),可以用 pandas 库,适合处理大数据量:
import pandas as pd # 复杂场景去重(含条件过滤) old_list =[5,12,12,8,15,15,20]# 转为Series去重,再过滤大于10的元素 new_series = pd.Series(old_list).drop_duplicates().loc[lambda x: x >10] new_list = new_series.tolist()print(new_list)# 输出:[12, 15, 20]优点:支持大数据量、可结合复杂条件过滤
缺点:需要额外安装 pandas 库
适用场景:数据分析、大数据量处理场景
性能对比总结
| 方法 | 适用场景 | 平均耗时(10 万条数据) |
|---|---|---|
| set () 去重 | 无需保留顺序 | 0.003 秒 |
| dict.fromkeys () 去重 | 需要保留顺序 | 0.005 秒 |
| pandas 去重 | 大数据量 + 条件过滤 | 0.012 秒 |
最后:一个小小的请求
不知不觉在 ZEEKLOG 分享技术笔记快 3年了,目前粉丝数 3955,距离 “优质创作者” 认证的 5000 粉丝目标还差 1045 个~如果你觉得这篇文章的技巧对你有帮助,或者想持续获取 Python、后端开发相关的干货内容,麻烦点击左上角【关注】 支持一下!非常感谢 !!!
后续会陆续更新更多实战教程(比如 “Python 爬虫避坑指南”“后端性能优化技巧”),关注后就能第一时间收到推送。每一个关注都是对我坚持分享的最大鼓励,感谢大家的支持,咱们下篇文章见!