Python中利用sorted()函数排序的简单教程
作者:廖雪峰 时间:2022-09-13 20:26:36
排序算法
排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
Python内置的sorted()函数就可以对list进行排序:
>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
此外,sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个reversed_cmp函数:
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
传入自定义的比较函数reversed_cmp,就可以实现倒序排序:
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]
我们再看一个字符串排序的例子:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']
默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:
def cmp_ignore_case(s1, s2):
u1 = s1.upper()
u2 = s2.upper()
if u1 < u2:
return -1
if u1 > u2:
return 1
return 0
忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。
这样,我们给sorted传入上述比较函数,即可实现忽略大小写的排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
['about', 'bob', 'Credit', 'Zoo']
从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。
标签:Python
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
教你轻松学会SQL Server记录轮班的技巧
2009-02-19 17:38:00
解决django的template中如果无法引用MEDIA_URL问题
2023-06-12 15:09:07
Python全栈之线程详解
2021-05-21 17:44:21
![](https://img.aspxhome.com/file/2023/4/101224_0s.png)
Python爬虫小练习之爬取并分析腾讯视频m3u8格式
2022-07-03 08:44:32
![](https://img.aspxhome.com/file/2023/5/90345_0s.png)
关于python下cv.waitKey无响应的原因及解决方法
2022-03-04 14:51:21
用JS实现一个页面两份样式表
2008-07-23 12:37:00
pyTorch深入学习梯度和Linear Regression实现
2023-05-12 01:00:45
![](https://img.aspxhome.com/file/2023/5/89435_0s.png)
python代码 FTP备份交换机配置脚本实例解析
2023-05-08 22:47:25
![](https://img.aspxhome.com/file/2023/7/70807_0s.png)
python学习与数据挖掘应知应会的十大终端命令
2022-03-05 10:38:19
![](https://img.aspxhome.com/file/2023/5/109855_0s.jpg)
详解超星脚本出现乱码问题的解决方法(Python)
2022-11-21 02:40:42
![](https://img.aspxhome.com/file/2023/3/72963_0s.png)
python的多重继承的理解
2021-04-27 16:54:21
![](https://img.aspxhome.com/file/2023/7/101737_0s.jpg)
MySQL数据库只监听某个特定地址的方法
2008-12-05 16:11:00
keras处理欠拟合和过拟合的实例讲解
2022-06-23 05:14:38
![](https://img.aspxhome.com/file/2023/8/104948_0s.jpg)
python实现WebSocket服务端过程解析
2022-09-14 10:45:19
![](https://img.aspxhome.com/file/2023/5/75855_0s.png)
msxml3.dll 错误 '800c0005'终极解决办法
2009-10-05 18:40:00
python中的hashlib和base64加密模块使用实例
2022-10-19 05:08:23
Python利用numpy实现三层神经网络的示例代码
2021-07-29 22:04:46
![](https://img.aspxhome.com/file/2023/0/80690_0s.jpg)
python django生成迁移文件的实例
2023-07-01 18:48:31
不要忽略了颜色的可用性
2009-03-05 18:19:00
![](https://img.aspxhome.com/file/UploadPic/20093/5/01-24s.jpg)
python3 拼接字符串的7种方法
2021-12-24 09:09:32