一篇文章带你搞定 Python 中 sort 方法与 sorted 函数

Python 列表有一个内置的 list.sort() 方法可以直接修改列表
还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表

一、基本排序

  1. sorted 会返回一个新的已排序的列表,而 list.sort() 方法会直接修改原列表
    对于 sorted 属于内置函数,因此不可以像调用列表的 sort 方法那样调用 sorted
    在这里插入图片描述
  2. sort()方法只是为列表定义,而 sorted() 函数可以接受任何可迭代对象
    在这里插入图片描述

二、关键函数

list.sort() 和 sorted() 都有一个 key 形参来指定在进行比较之前要在每个列表元素上进行调用的函数。

>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

key 形参的值应该是一个函数,它接受一个参数并并返回一个用于排序的键。这种技巧速度很快,因为对于每个输入记录只会调用一次 key 函数。
一种常见的模式是使用对象的一些索引作为键对复杂对象进行排序。例如:

>>> student_tuples = [ ('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

在这里插入图片描述

三、Operator 函数

上面显示的键函数模式非常常见,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。 operator 模块有 itemgetter() 、 attrgetter() 和 methodcaller() 函数
在这里插入图片描述
在这里插入图片描述

五、升序和降序

list.sort() 和 sorted() 接受布尔值的 reverse 参数。(两者都默认升序排列)
这用于标记降序排序。 例如,要以反向 age 顺序获取学生数据:
在这里插入图片描述

六、补充:对于列表按照多种规则排序

list.sort() 和 sorted() 都有一个 key 形参来指定在进行比较之前要在每个列表元素上进行调用的函数。
重要的是这个 key 值是一个函数,经常与 lambda 结合使用
例如:
每行代表一位考生的信息,包括:准考证号 德分 才分,其中准考证号为 8 位整数,德才分为区间 [0, 100] 内的整数,数字间以空格分隔。
考生按德分和才分的总分从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

分析题目需要进行三个排序,需要总分降序,总分同德分降序,德分也同需要准考证号升序

利用lambda 创建匿名函数,降序利用负号解决

num = []
for i in range(8):
    temp = list(map(int,input().split()))
    num.append(temp)

num.sort(key=lambda x:(-(x[1]+x[2]),-x[1],x[0]))
for i in num:
    print(i)

这句的含义就是,首先按照总分排序,总分同按德分排序,德分也同按照学号排序

num.sort(key=lambda x:(-(x[1]+x[2]),-x[1],x[0]))

在这里插入图片描述

  • 19
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值