Python高阶函数:sorted

排序算法

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个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()排序的关键在于实现一个映射函数。

猜你喜欢

转载自blog.csdn.net/qq_35612929/article/details/81114713