欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python高阶函数:sorted

程序员文章站 2024-03-26 09:44:53
...

排序算法

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([23, 45, 1, -19, -22, 88])
[-22, -19, 1, 23, 45, 88]

另外,sorted函数还可以接收一个key函数来实现自定义排序,例如按绝对值大小排序:

>>> sorted([11, 22, -33, 1, 2, 5, 3], key=abs)
[1, 2, 3, 5, 11, 22, -33]

原理是,key指定的函数将作用于list的每一个元素上,并根据函数返回的结果进行排序。


再来看一下字符串排序:

>>> sorted(['dabiaoge', 'Zyt', 'aaaa', 'WangGebi'])
['WangGebi', 'Zyt', 'aaaa', 'dabiaoge']

默认情况下,字符串排序是根据ASCII码的大小来比较的,由于大写字母的ASCII码比小写字母小,所以结果会如上所示。

那么,如果要忽略大小写,按照字母排序怎么办呢?

实际上,我们只需要在key函数把字符都变成大写或小写,再来比较即可。如下:

>>> sorted(['dabiaoge', 'Zyt', 'aaaa', 'WangGebi'], key=str.lower)
['aaaa', 'dabiaoge', 'WangGebi', 'Zyt']

如果要反向排序,只需要再加一个参数即可:

>>> sorted(['dabiaoge', 'Zyt', 'aaaa', 'WangGebi'], key=str.lower, reverse=True)
['Zyt', 'WangGebi', 'dabiaoge', 'aaaa']

小结:从上述例子看,高阶函数的抽象能力是非常强大的,而且核心代码可以保持的非常简洁。sorted()也是一个高阶函数,用sorted()排序的关键在于实现一个映射函数。