讲师中心 微信公众号
AI工具推荐 视频效率加速

Python set 与 list 去重性能对比分析

小涛君_5835

小涛君_5835

发布时间:2026-02-27 17:54:23

|

423人浏览过

|

来源于php中文网

原创

Python中set去重比list快,因set基于哈希表实现O(1)查找,而list需O(n)线性扫描,整体去重达O(n²);保序推荐dict.fromkeys(lst)或集合辅助推导式,均保持O(n)复杂度。

python set 与 list 去重性能对比分析

Python 中用 set 去重比用 list 去重快得多,核心原因是底层实现不同:set 基于哈希表,平均查找/插入时间复杂度为 O(1);list 是线性结构,每次检查是否已存在都要遍历,最坏 O(n),整体去重接近 O(n²)。

为什么 list 去重慢?

常见 list 去重写法如 [x for i, x in enumerate(lst) if x not in lst[:i]] 或手动遍历 + 判断,本质是每遇到一个新元素,都要在已有结果中逐个比较。数据量稍大(比如上万条),耗时会明显上升。

  • 每次 x not in result_list 都是线性扫描
  • 列表越长,后续每次判断越慢
  • 内存上虽不额外开销,但时间成本不可忽视

set 去重为什么快?

list(set(lst)) 是最简方式,依赖 set 的自动排重特性。set 插入时通过哈希值快速定位,冲突少时几乎常数时间完成。即使考虑哈希计算和去序问题,总时间仍稳定在 O(n) 级别。

  • 插入、查重都是平均 O(1)
  • 一次性遍历原列表即可完成去重
  • 适合大多数不要求顺序的场景

保留顺序时怎么兼顾性能?

若需保持首次出现顺序,直接用 set 会打乱顺序,但不必退回到纯 list 方案。推荐用 dict.fromkeys(lst)(Python 3.7+ 保证插入序)或集合辅助的循环:

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载

立即学习“Python免费学习笔记(深入)”;

  • list(dict.fromkeys(lst)) —— 简洁、高效、保序、原生支持
  • 手动方式:seen = set(); [x for x in lst if not (x in seen or seen.add(x))] —— 利用 set 快速查重,同时用列表推导保序

这两种都维持了 O(n) 时间复杂度,远优于纯 list 方案。

实际性能差距有多大?

在 10 万整数的测试中(无重复):

  • list(set(lst)):约 2–3 毫秒
  • dict.fromkeys(lst):约 4–6 毫秒
  • 纯 list 循环去重(if x not in res: res.append(x)):超过 1000 毫秒,慢两个数量级

数据越长,差距越显著;尤其含大量重复时,list 方案的内层扫描次数会爆炸式增长。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

618

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1496

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

3004

2025.09.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

20

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

40

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

40

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn