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
0
投稿

猜你喜欢

  • 教你轻松学会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
  • Python爬虫小练习之爬取并分析腾讯视频m3u8格式

    2022-07-03 08:44:32
  • 关于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
  • python代码 FTP备份交换机配置脚本实例解析

    2023-05-08 22:47:25
  • python学习与数据挖掘应知应会的十大终端命令

    2022-03-05 10:38:19
  • 详解超星脚本出现乱码问题的解决方法(Python)

    2022-11-21 02:40:42
  • python的多重继承的理解

    2021-04-27 16:54:21
  • MySQL数据库只监听某个特定地址的方法

    2008-12-05 16:11:00
  • keras处理欠拟合和过拟合的实例讲解

    2022-06-23 05:14:38
  • python实现WebSocket服务端过程解析

    2022-09-14 10:45:19
  • 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
  • python django生成迁移文件的实例

    2023-07-01 18:48:31
  • 不要忽略了颜色的可用性

    2009-03-05 18:19:00
  • python3 拼接字符串的7种方法

    2021-12-24 09:09:32
  • asp之家 网络编程 m.aspxhome.com