Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?

Python列表排序全解析:sort()与sorted()的深度对比与高阶应用 在数据处理中,排序是组织信息、提升查询与分析效率的核心操作。其原理基于比较和交换,旨在将无序序列调整为有序状态。Python内置的排序功能通过Timsort算法实现,该算法结合了归并排序和插入排序的优点,具有稳定、自适应且高效的特点,为处理大规模或部分有序数据提供了强大支持。在工程实践中,排序广泛应用于数据分析、结果展示、算法优化等场景,例如对用户列表按属性筛选、对日志按时间整理,或在格式化输出时对齐内容。本文聚焦Python列表排序,深入探讨sort()方法与sorted()函数在内存处理、自定义规则及性 阅读详情

在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用__lt__方法来进行排序比较,如果类中没有定义__lt__方法Python会怎么处理?
我们直接看案例:
一、 案例说明
本文案例直接在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》基础上通过两个三引号注释掉__lt__方法的定义,然后定义实例列表进行排序。
二、 案例代码

>>> class Car():
   def __init__(self,carname,oilcper100km, price):
       self.carname,self.oilcper100km,self.price = carname,oilcper100km, price
   '''def __lt__(self,other):
       print("execute __lt__")
       return self.price<other.price'''
   def __le__(self,other):
       print("execute __le__")
       return self.price>other.price
   def __gt__(self,other):
       print("execute __gt__")
       return self.oilcper100km>other.oilcper100km

   def __ge__(self,other):
       print("execute __ge__")
       return self.oilcper100km<other.oilcper100km

   def __repr__(self):
       #return  f"('{self.carname}',{self.oilcper100km},{self.price})"
       return str(self.__dict__)

>>> car1,car2,car3 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('科帕奇',12,23)
>>> cars=[car1,car2,car3]
>>> cars.sort()
execute __gt__
execute __gt__
execute __gt__
>>> cars
[{'carname': '凯美瑞', 'oilcper100km': 7, 'price': 27}, {'carname': '爱丽舍', 'oilcper100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcper100km': 12, 'price': 23}]
>>>

三、 案例截图
在这里插入图片描述
四、 案例分析
从上述案例可以看到,注释掉__lt__方法后,在未指定key参数的情况下Python排序方法调用了__gt__方法,并按__gt__方法比较大小的模式实现了数据排序,其实这与《Python的富比较方法__lt__、__gt__之间的关联关系分析》是一致的。
最后,如果__gt__方法也没有定义会怎么样?在此就不深入介绍,根据老猿的验证,如果__lt__和__gt__方法都没定义,其他富比较方法实现了,Python无法执行排序操作,会报异常:TypeError: ‘<’ not supported between instances of XX and XX。

老猿Python,跟老猿学Python!
博客地址:https://blog.youkuaiyun.com/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

Python列表排序全解析:从sort()/sorted()基础到Timsort算法与性能优化 排序是数据处理中的基础操作,其核心原理是将数据元素按照特定规则重新排列。在Python中,内置的排序功能基于高效的Timsort算法实现,该算法融合了归并排序和插入排序的优点,具有稳定性和自适应性,能智能利用数据中已有的有序片段。从技术价值看,Python排序不仅提供了list.sort()原地排序和sorted()新建排序两种方式,更通过key参数支持高度自定义的排序逻辑,极大地提升了开发效率。在实际应用场景中,无论是处理简单的数字列表、复杂的字典列表,还是实现多条件排序,开发者都需要根据数据特性和内存考 阅读详情

相关推荐

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6614

Python的富比较方法__lt__、__gt__之间的关联关系分析

Python的富比较方法包括__lt__、__gt__分别表示:小于、大于,对应的操作运算符为:“&lt;”、“>”。那么是否象...

weixin_30721899的博客 2452

嵌入式硬件中AI硬件设计方法与技巧

嘉立创EDA推出AI助手Kimi插件,为PCB设计提供智能支持。该插件具备四大核心功能:AI问答助手可解答各类电路设计问题;元件查询功能直接展示参数和应用场景;智能分析网表可检测潜在问题;电路图识别能解析图纸结构并提供改进建议。用户需通过扩展插件安装,并配置Kimi API密钥后使用。该工具旨在提升工程师的设计效率,减少查阅资料时间,特别适合项目交接和设计自查场景。

嵌入式技术开发 1868

python的lt魔术方法怎么用

Python 中的 __lt__ 方法是对应于小于运算符 &lt; 的魔术方法(称作运算符重载)。使用方法如下: 在自定义的类中定义 __lt__ 方法,类似于其他的方法。 在定义 __lt__ 方法时,需要接收一个参数,表示另一个与当前对象进行比较的对象。 在 __lt__ 方法中,进行对当前对象和参数对象的比较,并返回一个布尔值,表示当前对象是否小于参数对象。 例如,如果我们想定义一...

weixin_35755823的博客 2192

OmniDrive(3):逐行代码详解

模型效果: 端到端联合规划与推理 接下来,简单介绍下训练的配置 1.1 模型配置 模型基于sparse query based的3D Bev感知框架StreamPetr ,用query来编码动态目标(如车辆、行人)和静态地图元素(如车道线)。(1) tran、test和val数据配置 指定真值的文件路径: ann_file 指定输出处理的pipeline: 训练使用, test 和val使用 指定是否需要时序训练seq_mode (2)数据处理pipeline 自定义的Dataset 通过类实现,训

@bangbang的博客 719

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

本文为Open3D 点云数据处理基础教程(Python版),小白也能轻松上手!还等什么呢,学起来!

孙悟空 13万+

为什么Python中称__lt__、__gt__等为“富比较”方法

Python中基类object提供了一系列可以用于实现同类对象进行“比较”的方法,可以用于同类对象的不同实例进行比较,包括__lt__、__gt__、__le__、__ge__、__eq__和__ne__六个方法。 那么为什么叫“富比较”(“rich comparison”)方法呢?查了相关资料,并没有看到权威的定义,老猿结合网上零星的资料,分析原因如下: Python2.1以前的比较方法只提供...

老猿Python 9591

《AgentScope-Java 深入浅出教程》第10章 RAG 知识检索

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与文本生成相结合的技术架构。它通过从外部知识库中检索相关文档,将检索到的信息作为上下文注入到语言模型的提示中,从而增强模型的回答质量。│ RAG 工作流程 ││ ││ 用户问题 向量检索 上下文增强 生成回答 ││ ▼ ││ │ A │ ││ ││ 1. 接收问题 ││ 2. 将问题转换为向量,在知识库中检索相似文档 ││ 3. 将检索到的文档作为上下文添加到提示词中 │。

步子哥的博客 462

Python小技巧:富比较方法的妙用,__lt__、__le__、__eq__、__ne__、__gt__、__ge__。。。

Python小技巧,介绍以及重写富比较方法,__eq__, __lt__, __le__等等,知其然而知其所以然!

苟日新,日日新,又日新!!! 5982

【微电网优化】基于粒子群求解CHP机组、气网、电网、储热罐和电锅炉微电网优化模型附matlab代码

1 简介 我国风力发电近年发展迅速,装机容量已成为全球首位.随着风力发电在电力系统中的渗透率不断提高,我国多个地区(尤其是"三北"地区)已经面临着十分严峻的风电消纳问题,产生不容忽视的弃风问题.针对目前我国风电消纳存在的困难,本文提出粒子群优化CHP机组、气网、电网、储热罐和电锅炉微电网控制策略. 2 部分代码 Ppv=[0;0;0;0;0;0;9.86000000000000;19.0100000000000;33.1000000000000;45.0700000000000;64.7900000

qq_59747472的博客 672

【文献阅读】使用深度语音后验改进独立于说话者的构音障碍可懂度分类

原文名称:本文探讨了利用DeepSpeech后验概率改进说话人无关的构音障碍可理解性分类方法。作者提出了一个基于DeepSpeech(一种端到端的语音转文本引擎)输出的新特征集,用于评估构音障碍患者的语音可理解性。这些新特征在说话人无关的情况下表现良好,能够更好地处理不同说话人的变异性。背景介绍:数据集:特征提取:实验设置:结果:本文提出的新特征集在说话人无关的构音障碍可理解性分类任务中表现出色,特别是在低可理解性和高可理解性类别上。未来的工作将集中在减少低可理解性和中可理解性类别之间的混淆,以进一步提高系

帅小柏的博客 452

python中的__lt__ 方法(小于符号比较方法)

在python中,__lt__ 是用于实现“小于”比较的方法。它对应的是 < 运算符。如果你希望自定义对象支持 < 比较运算,可以通过实现 __lt__ 方法来实现。在这个__lt__方法中我们可以看见other这个参数,这个指的是另一个类对象。·传入参数 :other——另一个对象。·返回值 :Ture或Flase。·方法名 : __lt__

m0_59247951的博客 783

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1135

python定义列表lt_Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?...

在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用__lt__方法来进行排序比较,如果类中没有定义__lt__方法Python会怎么处理?我们直接看案例:一、案例说明本文案例直接在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》基础上通过两个...

weixin_39548972的博客 176

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python调用函数出现未定义_Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?...

在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用lt方法来进行排序比较,如果类中没有定义lt方法Python会怎么处理?我们直接看案例:一、 案例说明本文案例直接在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》基础上通过两个三引号注释掉...

weixin_39915815的博客 202

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python中调用类未定义_Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?...

在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用__lt__方法来进行排序比较,如果类中没有定义__lt__方法Python会怎么处理?我们直接看案例:一、案例说明本文案例直接在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》基础上通过两个...

weixin_42517406的博客 218

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python排序方法sorted和list.sort()使用讲解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码

yinyoudamo的博客 5259

Python中sort、sorted的cmp参数废弃之后使用__lt__支持复杂比较的方法

Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数。相应地从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数。但是这个函数不能支持两个对象之间进行比较,只支持对某个对象处理...

老猿Python 2853

Python排序函数详解:sort()、sorted()与reversed()的核心原理与实战应用

在数据处理与算法实现中,排序是基础且关键的操作,它直接影响程序的效率和可读性。Python内置的排序函数基于Timsort算法,提供了稳定且高效的排序能力。理解其原理有助于编写更优化的代码,尤其在处理大规模数据或复杂对象时。通过key参数,可以实现多级排序和自定义排序逻辑,这在数据分析、后端开发和算法预处理等场景中极为实用。例如,使用sorted()进行非原地排序可保留原始数据,而list.sort()则适合原地修改以提高内存效率。reversed()作为反向迭代器,在处理大文件或只需一次遍历时,能显著降低

weixin_34331102的博客 363

Python列表sort()方法深度解析:从基础用法到高级排序实战

在数据处理与算法实现中,排序是核心基础操作,它直接影响程序的执行效率与资源消耗。Python内置的排序机制基于高效的Timsort算法,该算法融合了归并排序与插入排序的优点,在平均与最坏情况下保持O(n log n)的时间复杂度,并能稳定处理部分有序数据。其技术价值在于通过原地排序优化内存使用,尤其适合大规模数据集处理。在实际应用场景中,开发者常需对复杂数据结构(如字典列表、对象列表)进行多级排序,或按自定义规则(如字符串长度、对象属性)排列。本文聚焦Python列表的`sort()`方法,深入探讨其与`s

weixin_33947521的博客 401

Python排序函数深度解析:sort()、sorted()与reversed()的核心区别与高阶应用

排序是数据处理中的基础操作,其核心原理是通过比较和交换元素位置,使数据集合按照特定规则有序排列。在Python中,这一功能通过内置的Timsort算法实现,该算法结合了归并排序和插入排序的优点,保证了O(n log n)的时间复杂度和稳定性。掌握高效的排序技术对于提升程序性能、优化内存使用至关重要,尤其在处理大规模数据集、数据库查询结果或API返回的JSON数据时。本文聚焦Python内置的排序工具,深入解析list.sort()、sorted()和reversed()三者的核心机制与适用场景,涵盖key参

weixin_33827590的博客 522

Python内置函数sorted()和列表方法sort()的排序原理

问题描述:在Python中,可以使用内置函数sorted()和列表方法sort()对数据进行排序,但要求所有数据支持关系运算符,也就是这些数据本身是可以比较大小的才能进行排序,除非使用ke...

董付国的Python专栏 325

Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能

Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数。相应地从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数。但是这个函数不能支持两个对象之间进行比较,只支持对某个对象处理...

老猿Python 4196
上一篇: Python中排序函数sorted和排序方法sort的异同点对比分析
下一篇: 为什么Python中sort方法和sorted函数调用废弃使用cmp参数
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值