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; ?>
】
相关推荐
- php485函数怎么捕获异常_php485错误处理
- Go 语言标准库为何不提供泛型 Contains
- c++中的Tag Dispatching是什么_c
- Python与GPU加速技术_CUDA与Numba
- Win11键盘快捷键大全_Windows 11常用
- 短链接怎么用php递归还原_多层加密链接的处理法【
- Win11怎么调整屏幕亮度_Windows 11调
- Win11怎样安装微信开发者工具_Win11安装开
- c++的static关键字有什么用 静态变量和静态
- Django密码修改后会话失效的解决方案
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- 如何处理“XML格式不正确”错误 常见XML we
- 如何使用Golang构建简易投票统计功能_Gola
- windows如何测试网速_windows系统网络
- Win11怎么关闭通知中心_Windows11系统
- php8.4如何配置ssl证书_php8.4htt
- Win11怎么关闭自动维护 Win11禁用系统自动
- 如何在Golang中使用time处理时间_Gola
- Win11 explorer.exe频繁崩溃_修复
- Win11怎么关闭内容自适应亮度_Windows1
- C++友元类使用场景_C++类间协作设计方式讲解
- c++怎么使用类型萃取type_traits_c+
- php本地部署后session无法保存_sessi
- Win10如何卸载预装Edge扩展_Win10卸载
- MAC怎么截图并快速编辑_MAC自带截图快捷键与标
- c# 在ASP.NET Core中管理和取消后台任
- Win11怎么开启专注模式_Windows11时钟
- c++ reinterpret_cast怎么用 c
- 为什么Go建议使用error接口作为错误返回_Go
- php中::能用于接口静态方法吗_接口静态方法调用
- php怎么操作Redis_Redis扩展连接与基本
- 如何在 Go 中高效缓存与分发网络视频流
- 如何使用Golang配置安全开发环境_防止敏感信息
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Win11如何设置系统声音_Win11系统声音调整
- Python网络日志追踪_请求定位解析【教程】
- 如何使用Golang处理网络超时错误_Golang
- Python对象比较排序规则_集合使用说明【指导】
- Win11任务栏怎么固定应用 Win11将软件图标
- Win11怎么设置单手模式_Win11触控键盘布局
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- Windows10电脑怎么设置防火墙出站规则_Wi
- Win11怎么设置虚拟桌面 Win11新建多桌面切
- Windows怎样拦截QQ浏览器广告_Window
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- PHP 中 require() 语句返回值的用法详
- Windows10如何更改盘符名称_Win10重命
- 如何在Golang中处理JSON字段缺失_Gola
- Golang如何实现基本的用户注册_Golang用
- 如何在 Go 中创建包含 map 的 slice(

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