Python3之高阶函数sorted
排序算法
Python内置的sorted()函数可以对list进行排序
1 2 | >>> sorted ([ 36 , 5 , - 12 , 9 , - 21 ]) [ - 21 , - 12 , 5 , 9 , 36 ] |
此外,sorted也是一个高阶函数,它还可以接收一个key函数来实现自定义排序,例如按绝对值大小排序
1 2 | >>> sorted ([ 36 , 5 , - 12 , 9 , - 21 ],key = abs ) [ 5 , 9 , - 12 , - 21 , 36 ] |
key指定的函数将作用于list的每一个元素上,并根据返回的结果进行排序
1 2 | list = [ 36 , 5 , - 12 , 9 , 21 ] keys = [ 36 , 5 , 12 , 9 , 21 ] |
然后sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素
1 2 3 | keys排序结果 = > [ 5 , 9 , 12 , 21 , 36 ] | | | | | 最终结果 = > [ 5 , 9 , - 12 , - 21 , 36 ] |
字符串排序的例子
1 2 | >>> sorted ([ 'bob' , 'about' , 'Zoo' , 'Credit' ]) [ 'Credit' , 'Zoo' , 'about' , 'bob' ] |
默认情况下,对于字符串的排序,是安装ASCII大小比较的,由于'Z'<'a'所以,大写字母在前
现在要忽略大小写按照字母排序,加一个函数要不把大写变成小写,要不把小写变成大写排序
1 2 | >>> sorted ([ 'bob' , 'about' , 'Zoo' , 'Credit' ],key = str .lower) [ 'about' , 'bob' , 'Credit' , 'Zoo' ] |
把str.lower方法依次作用于列表
1 2 3 4 | list = [ 'bob' , 'about' , 'Zoo' , 'Credit' ] keys = [ str .lower( 'bob' ), str .lower( 'about' ), str .lower( 'Zoo' ), str .lower( 'Credit' )] keys = [ 'bob' , 'about' , 'zoo' , 'credit' ] 最终排序结果[ 'about' , 'bob' , 'Credit' , 'Zoo' ] |
练习:用一组tuple表示学生名字和成绩,用sorted()对上述列表分别按名字及成绩排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | L = [( 'Bob' , 75 ),( 'Adam' , 92 ),( 'Bart' , 66 ),( 'Lisa' , 88 )] #函数返回第一个元素名字 def by_name(t): m = t[ 0 ] return m #函数返回第二个元素成绩 def by_score(t): n = t[ 1 ] return n L1 = sorted (L,key = by_name) L2 = sorted (L,key = by_score,reverse = True ) print (L1) print (L2) |
输出,按名字及成绩倒序排序
1 2 | [( 'Adam' , 92 ), ( 'Bart' , 66 ), ( 'Bob' , 75 ), ( 'Lisa' , 88 )] [( 'Adam' , 92 ), ( 'Lisa' , 88 ), ( 'Bob' , 75 ), ( 'Bart' , 66 )] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-06-24 AWK
2018-06-24 Redis+Keepalived实现高可用
2018-06-24 Redis哨兵配置