从基础到进阶分享3个Python列表高效去重技巧
作者:程序猿全栈の董
最近整理开发笔记时,发现列表去重是 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 秒 |
方法补充
下面小编为大家整理了其他Python列表去重的相关方法,希望对大家有所帮助
Python列表去重保持顺序方法
1.使用字典去重(Python 3.7+)
# 利用dict.fromkeys()自动去重并保持顺序 original_list = [1, 2, 2, 3, 4, 3, 5] unique_list = list(dict.fromkeys(original_list)) print(unique_list) # 输出: [1, 2, 3, 4, 5]
2.使用集合辅助遍历
def remove_duplicates(lst):
seen = set()
result = []
for item in lst:
if item not in seen:
seen.add(item)
result.append(item)
return result
data = ['a', 'b', 'a', 'c', 'b']
print(remove_duplicates(data)) # 输出: ['a', 'b', 'c']
3.性能与适用场景对比
| 方法 | 时间复杂度 | 保持顺序 | Python版本要求 |
|---|---|---|---|
| dict.fromkeys() | O(n) | 是 | 3.7+ |
| 集合辅助遍历 | O(n) | 是 | 所有版本 |
| set() | O(n) | 否 | 所有版本 |
- 若使用Python 3.7及以上,优先选择
dict.fromkeys() - 需兼容旧版本时,采用集合辅助的显式循环
- 避免使用
list(set(lst)),因其不保证顺序
到此这篇关于从基础到进阶分享3个Python列表高效去重技巧的文章就介绍到这了,更多相关Python列表去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
