Python sorted()函数:深入解析cmp_to_key与自定义排序

创始人
2025-01-12 22:51:36
0 次浏览
0 评论

Python排序sorted()函数里cmp_to_key和cmp

Python的sorted()函数用于对可迭代对象进行排序。
其基本用法如下:1.接收可迭代对象作为参数2.可以通过设置“Key”函数来自定义排序规则。
3.通过设置布尔变量“reverse”表示降序,“false”表示升序来控制排序方向。
在Python2中,sorted()函数接受cmp参数,该参数用于指定自定义比较函数。
Python3中去掉了cmp参数,引入了cmp_to_key函数来转换自定义比较函数,以提高性能。
cmp函数的实现如下:它接受两个参数进行比较,返回负值表示小于,返回零表示相等,正值表示大于。
例如,如果this_element小于other_element,则返回负值。
然而,在Python3中,直接使用“cmp”作为sorted()函数的参数会导致错误,因为“cmp”已被删除。
这时就应该使用cmp_to_key函数将cmp函数转换为key函数,以便能够被sorted()函数识别。
通过将自定义比较规则转换为“关键”函数,可以实现更复杂的排序。
例如,要实现降序排序,您可以编写一个与“cmp_default”逻辑相反的“cmp_reverse”函数。
更简洁的实现方法是使用“lambda”表达式根据升序和降序比较规则自动生成“key”函数。
要通过更改比较函数来实现倒序,如果this_element大于other_element,则cmp_reverse函数应返回负值。
这个逻辑可以通过Lambda表达式精确实现,根据LessThanT机制的支持,比较两个元素之间的差异并生成排序规则。
理解了这些概念后,你就可以尝试在LeetCode中解决相关问题,比如:B.179。
最大数量。
该题需要对数组进行自定义排序,以确保“a+b”形成的整数大于“b+a”。
那么“a”应该排在“b”之前。
通过定义一个“lambda”函数来实现这个比较规则,并将其作为“sorted()”函数的“key”参数,就可以完成数组的自定义排序。
我希望这些信息可以帮助您更好地理解Python中sorted()函数的实现及其自定义排序规则。

什么是python内置函数sorted

Python有两种内置的数据排序方法,即容器自带的排序函数和内置的排序函数。
sort方法直接对容器进行排序,而排序函数则创建一个新的排序容器。
对于列表L=[5,2,3,1,4],排序示例为:L.sort()。
Sorted函数的完整形式为sorted(iterable,cmp=None,key=None,reverse=False),其中iterable是要排序的iterable对象,cmp用于自定义比较规则,key用于指定关键字对于反向排序,确定排序顺序,默认为False。
对于多维列表L=[('b',2),('a',1),('c',3),('d',4)],可以使用lambda表达式进行排序,例如排序(L,key=lambdax:x[1])或排序(L,cmp=lambdax,y:cmp(x[1],y[1]),reverse=True)。
集合模块中的OrderedDict是一个有序字典,可以记录元素插入的顺序,常与排序函数结合使用。
例如,对于无序字典d={'banana':3,'apple':4,'pear':1,'orange':2},您可以将排序函数与OrderedDict一起使用来创建有序字典,例如collections.OrderedDict(sorted(d.items(),key=lambdat:t[0])),或根据其他关键字排序,例如lengthkey=lambdat:len(t[0])。

Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted()函数对所有可迭代对象进行排序。
内置函数sorted方法返回一个新列表,而不是对原始列表进行操作。
语法:sorted语法:sorted(iterable,cmp=None,key=None,reverse=False)返回值:返回重新排序的列表。
参数说明:cmp()函数用于比较两个对象。
如果xy返回1。
语法:cmp(x,y)参数:reverse()函数:用于反转列表中的元素。
语法:list.reverse()该方法没有返回值,但它将按相反顺序对列表中的元素进行排序。
如何使用sorted:默认情况下,sorted函数会对列表进行升序排序,并返回一个新的列表对象。
原来的列表不变,最简单的排序。
按升序排序的示例:>>>nums=[3,4,5,2,1]>>>sorted(nums)[1,2,3,4,5]按降序排序:如果您想按降序排序,只需指定参数reverse=True即可。
降序排序示例:>>>sorted(nums,reverse=True)[5,4,3,2,1]自定义规则排序:如果要按照某种规则排序,需要指定参数key,即是一个函数对象。
字符串长度排序示例:>>>chars=['Andrew','This','a','from','is','string','test']>>>sorted(chars,key=len)['a','is','from','test','This','Andrew','string']元组排序:对于复合列表结构,比如由元组组成的列表,必须进行排序根据中的一个元素tuple,您可以使用lambda来定义匿名函数。
元组排序示例:>>>students=[('zhang','A'),('li','D'),('wang','C')]>>>sorted(students,key=lambdax:x[1])[('zhang','A'),('wang','C'),('li','D')]自定义类排序:如果排序的元素是自定义类,例如按年龄排序,可以写为排序示例:>>>a=[5,7,6,3,4,1,2]>>>b=sorted(a)#保留原列表>>>a[5,7,6,3,4,1,2]>>>b[1,2,3,4,5,6,7]>>>L=[('b',2),('a',1),('c',3),('d',4)]>>>sorted(L,cmp=lambdax,y:cmp(x[1],y[1]))#使用cmp函数[('a',1),('b',2),('c',3),('d',4)]>>>排序(L,key=lambdax:x[1])#使用键[('a',1),('b',2),('c',3),('d',4)]>>>学生=[('john','A',15),('jane','B',12),('dave','B',10)]>>>sorted(students,key=lambdas:s[2])#排序依据年龄[('戴夫','B',10),('简','B',12),('约翰','A',15)]>>>排序(学生,key=lambdas:s[2],reverse=True)#按降序排列[('john','A',15),('jane','B',12),('dave','B',10)]>>>对多个字段进行排序:您可以使用元组对多个字段进行排序。
排序示例:>>>sorted(student_objects,key=lambdat:(t.age,t.grade))[('dave','B',10),('lily','A',12),('jane','B',12),('john','A',15)]自定义类排序:可以使用operator模块的attrgetter函数更高效地指定key。
排序示例:>>>fromoperatorimportattrgetter>>>sorted(student_objects,key=attrgetter('age'))[('dave','B',10),('jane','B',12),('john','A',15)]对不可比较的元素进行排序:如果元素本身不具有可比性,则需要自定义比较规则。
排序示例:>>>nums=[2,1.5,2.5,'2','2.5']>>>sorted(nums)TypeError:'<'notsupportedBetweeninstancesof'str'and'int'Python2和Python3的区别:在Python3中,字符串和数字不能进行比较。
排序函数的区别:sorted()函数适用于任何可迭代对象,而sort()通常用于列表。
排序结果返回:sorted()函数返回排序后的列表,原列表保持不变;sort()函数直接修改原始列表,函数返回值为None。

sorted函数python

Python的sorted函数介绍如下

sorted()是Python的内置函数之一。
它的功能是对序列(列表、元组、字典、集合和字符串)进行排序。

sorted()函数的基本语法格式如下

List=Sorted(iterative,key=None,reverse=False)

其中FROM,表示可迭代的指定序列,主要参数可以自定义排序规则;reverse参数指定是按升序(false,默认)还是降序(true)排序。
Sorted()函数返回一个排序列表。

注意,主参数和反向参数是可选参数,可以使用也可以忽略。

演示sorted()函数的基本代码用法:

#SortList

a=[5,3,4,2,1]

print(sort(a))

#排序元组

a=(5,4,3,1,2)

打印(已排序(A))

a={4:1,\

5:2,\

3:3,\

2:6,\

1:8}

print(sorted(a.items()))

#对集合进行排序

a={1,5,3,2,4}

print(sort(a))

#对字符串进行排序

a="51423"

打印(已排序(a))

热门文章
1
C语言编程:爱心图案代码解析与实现 爱心c语言程序代码详情如下。#include,intmain()inti,j,k...

2
C程序设计实践教程:系统学习与实际操作指... c程序设计实践教程内容简介这是一本《C程序设计》实用教程,共分10章,内容分为学...

3
C++字符串处理技巧:定义、操作与排序实... c++如何定义大量字符串字符*s[100];这样,你就会得到一个包含100个字符...

4
C语言实现字符剔除与输出——C++程序示... C语言C++程序编写要求键盘输入一串字符,然后剔除其中一个字符,再输出剩下的字符...

5
C语言for循环嵌套执行原理及运算流程解... c语言中for循环嵌套的运算流程?for循环的一般形式为:for(表达式1;表达...

6
C语言实现100以内素数和计算方法详解 c语言求100以内素数的和解决方案1:#include#includeintpr...

7
Java面试常见问题解析攻略 一般java面试都会问些什么问题1您能介绍一下自己吗?回答提示:大多数人回答这个...

8
AI代写应用解析:从学生到技术工人,探索... ai代写使用人群有哪些学生、科技工作者等。学生:无论是初中生、大学生还是研究生,...

9
Python编程教程:0-10000数字... python输入0-10000的一个数,将数字转换成中文汉字零一二三四五六七八九...

10
C语言贪吃蛇游戏开发详解:从初始化到游戏... 贪吃蛇c语言代码#defineN200#include#include#incl...