Python百万级列表快速移除索引0值重复元素的最优方法
优化百万级列表去重的实现方式
原方案的问题在于用列表processed存储已处理的key,每次判断elem[0] not in processed都要遍历整个列表,时间复杂度为O(n²),百万级数据下自然会很慢。下面是两种更高效的实现方式:
方法一:用集合记录已出现的key(最优选择)
集合的成员判断是**O(1)**时间复杂度,整体时间复杂度降到O(n),速度会提升几个数量级:
processed = set() no_duplicates = [] for elem in a: key = elem[0] if key not in processed: no_duplicates.append(elem) processed.add(key)
方法二:利用有序字典(Python 3.7+)
Python 3.7及以上的字典会保留插入顺序,可以用dict.fromkeys快速完成去重,一步到位:
# 以元素的索引0作为键,元素本身作为值,字典会自动保留第一个出现的键值对 no_duplicates = list(dict.fromkeys(a, key=lambda x: x[0]).values())
不过这种方法性能略逊于集合的循环实现,因为dict.fromkeys内部多了一层逻辑处理,但依然远快于原列表方案。
性能对比
- 原方案:百万级数据下,每次
in操作都要遍历列表,耗时可达数秒甚至更久 - 集合方案:百万级数据处理时间通常在几十毫秒级别
- 有序字典方案:耗时比集合方案稍长,但也在百毫秒以内
内容的提问来源于stack exchange,提问作者dmuensterer
相关产品推荐
相关产品推荐

