python中的集合(set)给列表去重

发布时间:2026/11/11 11:37:41

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))。
延伸阅读

更多相关文章

2026/11/11 11:37:39

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/11 10:55:34

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

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

2026/11/9 17:35:50

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

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

2026/11/11 11:34:15

电工证办理托运行李有效期多久?真实经历告诉你别再踩坑

电工证办理托运行李有效期多久?真实经历告诉你别再踩坑 现在找工作动不动就要特种作业证,特别是电工证,几乎是很多建筑工人的“入场券”。我自己就是从工地一线干起来的,去年刚换了个项目,结果因为电工证过期被叫停,差点耽误了整个工期。如果你也正在找…

2026/11/11 11:34:15

灵寿低压电工证复审保姆级教程:外省证怎么转过来?

灵寿低压电工证复审保姆级教程:外省证怎么转过来? 之前考的证在外省能不能转过来?这个问题困扰了不少在灵寿从事低压电工工作的朋友,尤其是那些从外地过来打工或者换工作地点的电工。今天就来给你讲讲【灵寿低压电工证复审】的保姆级教程,帮你理清流程、…

2026/11/11 11:34:14

各地电工证报考时间证怎么转异地

电工证报考时间紧张?周口房建工程从业者真实经历告诉你怎么抓机会 你是不是也在为找一份稳定的工作发愁?急需特种作业证才能上岗找工作,这话说来简单,但落实到具体操作上,真的不是谁都能轻松搞定的。特别是像我这样在周口从事房建工程的电工,手上没有低…

2026/11/11 11:29:14

德兴铜矿考电工证含金量高,工地太忙也能考

德兴铜矿考电工证含金量高,工地太忙也能考 工地太忙根本没时间复习考试,但你又知道电工证的含金量有多高。特别是在像德兴铜矿这样的大型工程项目里,电工证不但是上岗的“通行证”,更是职业发展的“跳板”。很多人误以为考试难、复习难,其实只要掌握方法…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑