Python对象比较排序规则_集合使用说明【指导】
技术百科
冷漠man
发布时间:2026-01-01
浏览: 次 Python集合不可排序、无序且元素必须可哈希;比较依赖__eq__和__hash__,自定义类需同步实现二者;sorted()返回新列表,元素须可比较;集合间支持子集、相等性比较;避免误用.sort(),有序去重推荐dict.fromkeys()。
Python中对象的比较和排序依赖于内置的比较逻辑,而集合(set)本身是无序、不重复的容器,不支持索引、切片或直接排序,也不能包含可变对象。理解其底层规则,才能正确使用比较、转换与排序操作。
对象比较的核心:__eq__ 和 __hash__
集合判断两个元素是否相等,依据是 __eq__ 方法;能否加入集合,则取决于是否可哈希——即实现了 __hash__ 且满足“相等对象必须有相同哈希值”的约定。
- 内置不可变类型(如
int、str、tuple)默认可哈希,可直接用于集合 - 自定义类若想放入集合,需明确定义
__hash__和__eq__,且逻辑一致(例如:若a == b为真,则hash(a) == hash(b)必须为真) -
list、dict、set等可变类型不可哈希,不能作为集合元素,否则抛出TypeError
集合本身不能排序,但可转为有序结构
集合无顺序概念,调用 sorted() 实际是对它的迭代结果(即元素序列)排序,返回的是新列表,不是原集合改变。
-
sorted({3, 1, 4})→[1, 3, 4](升序,元素需支持比较) - 若含不同类型(如
{1, "a"}),sorted()会报TypeError:无法比较int和str - 可传入
key参数定制排序逻辑,例如按绝对值:sorted({-3, 1, -2}, key=abs)→[1, -2, -3]
集合间比较:子集、超集与相等性
集合支持数学意义上的包含关系比较,不依赖元素顺序:
a 表示a是b的子集(含相等);a 表示真子集-
a >= b表示超集;a == b判断元素完全相同(自动忽略顺序和重复) - 注意:
a == b不等价于id(a) == id(b),而是逐个元素比对成员关系
常见误用与规避建议
实际编码中容易混淆集合与列表/元组的行为:
- ❌ 错误:试图对集合调用
.sort()(该方法只属于列表)→ 报AttributeError - ❌ 错误:用
list(set(...))去重后假设顺序不变 → 实际顺序由哈希分布决定,Python 3.7+ 虽保持插入顺序,但集合本身不保证 - ✅ 正确做法:需要有序去重时,优先考虑
dict.fromkeys(iterable)(保留首次出现顺序),再转list - ✅ 若需可排序且唯一,可用
sorted(set(data)),但务必确保元素类型兼容比较
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++的mutex和lock_guard如何使用
- c++ reinterpret_cast怎么用 c
- C++如何编写函数模板?(泛型编程入门)
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- Windows服务无法启动错误1067是什么_进程
- c++ unordered_map怎么用 c++哈
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- Flask 表单数据通过 SMTP 发送邮件的完整
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- 如何用列表一次性对 DataFrame 的指定列应
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Win11文件夹预览图不显示怎么办_Win11缩略
- php错误怎么开启_display_errors与
- VSC怎样在Linux运行PHP_Ubuntu系统
- 短链接怎么用php递归还原_多层加密链接的处理法【
- Python高性能计算项目教程_NumPyCyth
- 如何使用Golang写入二进制文件_Golang
- Win11怎么设置组合键快捷方式_Windows1
- Mac如何设置动态壁纸?(让桌面动起来)
- Python文件管理规范_工程实践说明【指导】
- c# F# 的 MailboxProcessor
- MySQL 中使用 IF 和 CASE 实现查询字
- php订单日志怎么记录评价_php记录订单评价日志
- MAC怎么设置程序窗口永远最前_MAC窗口置顶插件
- Windows10如何更改计算机工作组_Win10
- Win11怎样安装剪映专业版_Win11安装剪映教
- 手机php文件怎么变成mp4_安卓苹果打开php转
- 如何诊断并终止卡死的 multiprocessin
- PHP主流架构如何处理会话管理_Session与C
- Windows10电脑怎么查看硬盘通电时间_Win
- c++的STL算法库find怎么用 在容器中查找指
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- php8.4xdebug无法调试怎么办_php8.
- php下载安装后swoole扩展怎么安装_异步框架
- Win11快速助手怎么用_Win11远程协助连接教
- 如何在Golang中处理数据库事务错误_回滚和日志
- php在Linux怎么部署_LNMP环境搭建PHP
- php后缀怎么变mp4能播放_让php伪装mp4正
- 如何在Golang中实现邮件发送功能_Golang
- Win10文件历史记录怎么用 Win10开启自动备
- php下载安装后memory_limit怎么设置_
- Windows10怎么卸载预装软件_Windows
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- Python异步编程高级项目教程_asyncio协
- Win11怎么关闭系统透明度_Windows11个
- Windows10无法连接到Internet_Wi
- php转exe用什么工具打包快_高效打包软件推荐【
- c++如何连接Redis c++ hiredis库
- Python代码测试策略_质量保障解析【教程】
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧

较依赖__eq__和__hash__,自定义类需同步实现二者;sorted()返回新列表,元素须可比较;集合间支持子集、相等性比较;避免误用.sort(),有序去重推荐dict.fromkeys()。
QQ客服