- 零基础入门Python数据分析与机器学习
- 王国平
- 580字
- 2022-07-27 18:22:48
2.3.4 sorted()函数
排序是程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心都是比较两个元素的大小。如果用于排序的是数字,可以直接比较,但如果是字符串或者字典,直接比较数学上的大小是没有意义的,因此比较的过程必须通过函数抽象出来。
Python内置的sorted()函数可以对列表进行排序:
sorted([12, 2, -2, 8, -16])
运行上述代码,输出为“[-16, -2, 2, 8, 12]”。
此外,sorted()函数可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序,代码如下:
sorted([12, 2, -2, 8, -16],key=abs)
运行上述代码,输出为“[2, -2, 8, 12, -16]”。
用key指定的函数将作用于列表的每一个元素上,并根据key函数返回的结果进行排序。
我们再看一个字符串排序的例子,代码如下:
sorted(['Month', 'year', 'Day', 'hour'])
运行上述代码,输出为“['Day', 'Month', 'hour', 'year']”。
默认情况下,对字符串的排序是按照字符串中字符的ASCII编码的大小来排序的,大写字母会排在小写字母的前面。
现在,我们提出排序忽略大小写,按照字母顺序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为忽略字母大小写的排序即可。忽略字母大小写来比较两个字符串,实际上就是先把字符串中的字母都变成大写字母(或者都变成小写字母),然后再进行比较。
这样,我们给sorted()函数传入key函数,即可实现忽略字母大小写进行排序:
sorted(['Month', 'year', 'Day', 'hour'],key=str.lower)
运行上述代码,输出为“['Day', 'hour', 'Month', 'year']”。
要进行反向排序,不必改动key函数,传入第三个参数reverse=True即可:
sorted(['Month', 'year', 'Day', 'hour'], key=str.lower, reverse=True)
运行上述代码,输出为“['year', 'Month', 'hour', 'Day']”。