Python对象比较与排序_集合使用说明【指导】


Python中对象比较与排序需区分值相等(==,调用__eq__)和同一性(is,比较id);sorted()返回新列表,list.sort()原地排序;set无序不可排序,去重后需转list再排序。

Python中对象的比较与排序,核心在于明确“值相等”和“顺序大小”的区别;集合(set)本身无序且不支持排序,但可与其他数据结构配合实现去重、交并差等逻辑。关键不是硬套规则,而是理解底层机制再选合适工具。

对象比较:== 与 is 的本质区别

== 判断两个对象的值是否相等,调用的是 __eq__ 方法;is 判断是否为同一内存对象(即 id 是否相同)。自定义类若未重写 __eq__,默认行为等同于 is。

  • 字符串、数字等不可变类型,小范围整数(-5 到 256)和短字符串可能被缓存,导致 is 偶尔返回 True,但这不是规范保证,切勿依赖
  • 列表、字典、自定义实例默认 == 比较内容(递归),但 is 几乎总为 False,除非显式赋值引用同一对象
  • 需自定义比较逻辑时,在类中实现 __eq__(和 __hash__ 若需放入 set/dict)

排序基础:sorted() 与 list.sort()

sorted() 返回新列表,原对象不变;list.sort() 就地排序,返回 None。两者都接受 key 参数指定排序依据,reverse 控制升/降序。

  • key 应为函数,接收单个元素,返回用于比较的值。例如 sorted(data, key=lambda x: x.name) 按 name 属性排
  • 若元素本身不支持直接比较(如含 None、混合类型或自定义对象无 __lt__),必须提供 key,否则报 TypeError
  • 稳定排序:相同 key 值的元素保持原有相对顺序,Python 的 sort 保证稳定

集合(set)的正确使用场景

set 是无序、唯一、可变的哈希容器,不支持索引、切片或排序操作。它适合快速查重、成员判断、集合运算,而非存储有序数据。

  • 创建:s = {1, 2, 3} 或 s = set([1, 2, 3]);空集合只能用 set(),{} 是空字典
  • 常见操作:s.add(x)、s.discard(x)(不存在不报错)、s.remove(x)(不存在报错)、s.pop()(随机删一个)
  • 集合运算:s1 & s2(交集)、s1 | s2(并集)、s1 - s2(差集)、s1 ^ s2(对称差);也可用方法形式如 s1.intersection(s2)
  • 若需“去重后排序”,先转 list 再 sorted(list(s)),不要试图对 set 排序

混合使用:排序 + 集合去重的典型组合

实际开发常需“去重后按某规则排序”。此时应分两步:先用 set 或 dict.fromkeys() 去重(保持插入顺序可用 dict.fromkeys(lst).keys()),再排序。

  • 例:对用户列表按年龄去重(同名同龄算重复)后按分数降序:sorted(set(users), key=lambda u: u.score, reverse=True)
  • 注意:set(users) 要求 users 中对象已实现 __eq__ 和 __hash__,否则报错;更稳妥做法是提取关键字段构造 frozenset 或 tuple 去重
  • 大数据量时,用 set 记录已见 key(如 name),遍历原列表筛选,再排序,避免全量构造中间集合


# python  # 大数据  # 工具  # 区别 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win10怎么更改用户名 Win10修改账户名称操作教程  如何在Golang中编写端到端测试_Golang E2E测试流程示例  PHP的FastAdmin架构适合二次开发吗_特点分析【介绍】  Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  c++中如何进行二进制文件读写_c++ read与write函数用法  Win11如何关闭小娜Cortana Win11禁用Cortana语音助手【优化】  Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法  Windows如何拦截2345弹窗广告_Windows拦截2345弹窗方法【步骤】  如何在Golang中引入测试模块_Golang测试包导入与使用实践  php485返回数据不完整怎么办_php485数据分包重组处理方法【教程】  php转mp4怎么设置帧率_调整php生成mp4视频帧率说明【说明】  Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】  c++中如何使用虚函数实现多态_c++多态性实现原理  如何优化Golang程序CPU性能_Golang CPU密集型任务优化方法  php中::能用于接口静态方法吗_接口静态方法调用规则【操作】  Linux如何使用Curl发送请求_Linux下API接口测试与文件下载技巧【步骤】  Win10如何卸载WindowsDefender_Win10卸载Defender教程【方法】  XML的“混合内容”是什么 怎么用DTD或XSD定义  c# await 一个已经完成的Task会发生什么  php做exe支持多线程吗_并发处理实现方式【详解】  如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理  WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程  Win10怎样卸载自带Edge_Win10卸载Edge浏览器步骤【教程】  Win11怎么更改计算机名_Windows11系统信息重命名设备教程  XSLT怎么生成动态的HTML属性名和标签名  如何开启Windows的远程服务器管理工具(RSAT)?(管理服务器)  如何使用Golang sort排序切片_Golang sort排序方法示例  如何解决同一段404代码在不同主机上表现不一致的问题  如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例  Win11怎么查看显卡显存_查询Win11显卡详细参数方法【步骤】  Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】  如何使用Golang recover捕获panic_防止程序崩溃并处理异常  Python并发安全问题_资源竞争说明【指导】  Win11怎么设置默认邮件客户端 Win11修改Mail应用关联【教程】  c++怎么使用std::tuple存储多元组数据_c++ 11获取元素与解包操作【技巧】  Win11笔记本怎么看电池健康度_Win11电池报告生成命令【详解】  Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】  如何使用Golang反射创建map对象_动态生成键值映射  Win11资源管理器卡顿怎么办 Win11文件资源管理器重启技巧【优化】  php打包exe如何加密代码_防反编译保护方法【技巧】  Win11怎么激活Windows10_Win11激活Win10系统方法【步骤】  Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式  短链接怎么自定义还原php_修改解码规则适配需求【汇总】  Python爬虫项目实战教程_Scrapy抓取与存储数据实例  Python实现图数据库操作_Neo4j核心CRUD与图算法解析  如何使用Golang搭建本地API测试环境_快速验证接口功能  如何在Golang中处理URL参数_Golang URL参数解析与路由映射方法  c++中如何求一个数的平方根_c++ sqrt函数与牛顿迭代法  c++中如何对数组进行排序_c++数组排序算法汇总 

 2026-01-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.