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, 91221, 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)]

  

posted @   minseo  阅读(676)  评论(0编辑  收藏  举报
编辑推荐:
· 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哨兵配置
点击右上角即可分享
微信分享提示