Python3学习笔记08——排序算法

本文深入探讨了Python排序的多种方式,包括使用内置的sorted()函数进行基本排序、按绝对值大小排序、忽略大小写的字符串排序及反向排序。同时,介绍了如何通过自定义key函数实现复杂数据结构如tuple的排序,使读者能够灵活掌握并应用各种排序技巧。

排序是程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小,如果是数字,可以直接比较,但如果是字符串或者两个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)]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值