python中的集合(set)给列表去重
使用集合set给列表去重的核心原理是利用集合的“元素唯一性”特性自动过滤重复项。但需注意直接转集合会丢失原始顺序若需保留顺序应结合字典dict.fromkeys()或辅助集合实现。以下是具体方法一、基础去重方法1. 直接转集合不保序最快原理集合天然不允许重复元素将列表转为集合会自动去重。代码示例nums unique list(set(nums)) print(unique) # 输出顺序随机**不保证原顺序**适用场景无需保留原始顺序时如统计唯一值、去重后直接排序等。性能时间复杂度O(n)是所有方法中最快的。2. 保序去重推荐方法(1) 使用dict.fromkeys()Python 3.7原理Python 3.7 的字典默认保持插入顺序用列表元素作键可同时去重并保序。代码示例nums unique list(dict.fromkeys(nums)) print(unique) # 输出**保留首次出现顺序**优势代码简洁、性能高O(n)是官方推荐的保序去重方案。(2) 辅助集合 循环通用兼容原理遍历原列表用集合记录已出现元素仅添加新元素到结果列表。代码示例nums seen set() unique [x for x in nums if x not in seen and not seen.add(x)] print(unique) # 输出适用场景需兼容旧版 Python3.7或需自定义去重逻辑时。二、关键注意事项1.元素必须可哈希集合要求元素是可哈希的不可变对象如数字、字符串、元组。不可直接处理列表/字典等可变对象需先转为可哈希类型# 错误示例列表不可哈希 # data [, , ] # list(set(data)) # 报错TypeError: unhashable type: list # 正确做法转为元组 data [, , ] unique [list(t) for t in set(tuple(x) for x in data)] print(unique) # 输出[, ]自定义对象需实现__hash__和__eq__方法。2. 顺序问题set()去重不保留顺序不同 Python 版本/运行环境结果顺序可能不同。保序方法的选择优先用dict.fromkeys()Python 3.7。旧版本可用collections.OrderedDictfrom collections import OrderedDict unique list(OrderedDict.fromkeys(nums))3. 性能对比方法是否保序时间复杂度适用场景list(set(lst))❌O(n)无需顺序速度最快list(dict.fromkeys(lst))✅O(n)需保序的常规场景循环 辅助集合✅O(n)需自定义逻辑或兼容旧版本列表推导式if x not in✅O(n²)小数据量避免用于大数据集大数据量时O(n²) 方法如列表推导式性能显著劣于 O(n) 方法。三、复杂场景处理1. 按对象属性去重场景列表元素为字典/对象需根据特定字段去重。解决方案用字段值作为唯一标识结合辅助集合data [{id: 1, name: A}, {id: 1, name: B}, {id: 2, name: C}] seen set() unique [x for x in data if x[id] not in seen and not seen.add(x[id])] print(unique) # 输出[{id: 1, name: A}, {id: 2, name: C}]2. 大数据量去重内存优化流式处理避免一次性加载全部数据。def stream_deduplicate(iterable): seen set() for item in iterable: if item not in seen: seen.add(item) yield item # 用法unique list(stream_deduplicate(large_data_stream))总结无需保序直接用list(set(original_list))速度最快。需要保序优先用list(dict.fromkeys(original_list))Python 3.7简洁高效。元素不可哈希先转换为可哈希类型如元组再用集合去重。性能关键点避免在循环中使用if x not in listO(n²)必须用集合辅助判断O(1)。以上方法均不修改原列表而是返回新列表。若需原地去重需结合切片赋值original_list[:] list(dict.fromkeys(original_list))。

相关新闻

RimSort终极指南:5分钟掌握环世界MOD管理的完整教程

RimSort终极指南:5分钟掌握环世界MOD管理的完整教程

RimSort终极指南:5分钟掌握环世界MOD管理的完整教程 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-manage…

2026/11/8 6:47:58 阅读更多 →
从零构建自主循环AI Agent系统:核心组件、实战代码与工程化部署

从零构建自主循环AI Agent系统:核心组件、实战代码与工程化部署

1. 先搞清楚“会自己找活”的Agent Loop到底解决了什么 别再手动一条条给AI下指令了。如果你还在为每个任务单独写Prompt、等结果、再根据结果写下一个Prompt,那说明你的工作流还停留在“手动挡”阶段。一个能“自己找活”的Agent Loop系统,核心解决的就…

2026/11/2 16:19:55 阅读更多 →
AI应用生产环境安全防护实战:从网络隔离到输出审查的完整指南

AI应用生产环境安全防护实战:从网络隔离到输出审查的完整指南

这次我们来看一个在生产环境中保护 AI 智能体、MCP 服务器与 LLM 应用的安全实践。这不仅仅是理论探讨,而是直接关系到你的模型服务能否稳定、安全地对外提供能力。无论是自研的智能体、基于 Model Context Protocol (MCP) 构建的服务器,还是各类大语言模…

2026/10/29 10:09:22 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/8 1:35:05 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/8 1:38:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻