跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

python集合和列表推导式哪种方法去重快

集合去重更快因其哈希实现,时间复杂度O(1);列表推导式查重为O(n²)较慢;需保序时推荐dict.fromkeys(),兼具性能与顺序。 在 Python 中,用集合(set)和列表推导式去重, 集合去重更快 。原因在于数据结构和时间复杂度的差异。 集合去重:高效且简洁 集合是哈希实现的,插入和查找平均时间复杂度为 O(1)。将列表转为集合会自动去除重复元素: my_list = [1, 2, 2, 3, 4, 4, 5]unique_list = list(set(my_list)) 这种方法只遍历一次原列表,整体时间复杂度接近 O(n),效率高。 列表推导式去重:逻辑清晰但慢 如果用列表推导式配合条件判断去重,比如维护一个已见元素的列表: 立即学习 “ Python免费学习笔记(深入) ”; Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 seen = []unique_list = [x for x in my_list if x not in seen and not seen.append(x)] 虽然能保持原始顺序,但
x not in seen
是对列表的线性查找,每次操作耗时 O(k),整体变成 O(n²),数据量大时明显变慢。 兼顾速度与顺序的推荐方法 如果需要保持顺序又追求性能,推荐使用
dict.fromkeys()
: unique_list = list(dict.fromkeys(my_list)) 字典从 Python 3.7 起保证插入顺序,且键的查找为 O(1),速度接近集合,还能保留元素首次出现的顺序。 基本上就这些:单纯去重选
set
,要保序用
dict.fromkeys()
,避免用列表推导式做重复检查。不复杂但容易忽略效率差别。

相关文章