排序是程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小,如果是数字,可以直接比较,但如果是字符串或者两个dict呢?这时需要通过函数抽象出来。
对于两个元素x和y,如果认为x<y,则返回-1,如果认为x=y,则返回0,如果认为x>y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
Python内置的sorted()函数就可以对list进行排序:
sorted([21,5,-13,9,-181])
输出结果:
[-181,-13,5,9,21]
此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数赖实现自定义的排序,例如按绝对值大小进行排序:
sorted([21,5,-13,9,-181],key=abs)
输出结果:
[5,9,-13,21,-181]
字符串排序:
默认情况下,对字符串排序,是按照ASCII的大小比较的,由于‘Z’<a,结果,大写字母Z会排在小写字母a的前面。
现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为户略大小写排序即可。忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者小写),再比较。
sorted(['bob','about','Zoo','Credit'],key=str.lower)
输出结果:
[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]
要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True
sorted(['bob','about','Zoo','Credit'],key=str.lower,reverse=True)
输出结果:
[‘Zoo’, ‘Credit’, ‘bob’, ‘about’]
总结:sorted()是一个高阶函数,该排序的关键在于实现一个映射函数。
注:sort是永久的,sorted是临时的。
用一组tuple表示学生成绩,请按成绩从高到底排序:
L=[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)]
def by_name(t):
return t[1]
print(sorted(L,key=by_name,reverse=True))
输出结果:
[(‘Adam’, 92), (‘Lisa’, 88), (‘Bob’, 75), (‘Bart’, 66)]
本文深入探讨了Python排序的多种方式,包括使用内置的sorted()函数进行基本排序、按绝对值大小排序、忽略大小写的字符串排序及反向排序。同时,介绍了如何通过自定义key函数实现复杂数据结构如tuple的排序,使读者能够灵活掌握并应用各种排序技巧。
1万+

被折叠的 条评论
为什么被折叠?



