python中的排序(二)

书接上文,咱们接着说:
3.Operator 模块函数:
上面显示的键函数模式非常常见,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。operator
模块有 itemgetter() 、attrgetter() 和 methodcaller() 函数。
使用这些函数,上述示例变得更简单,更快捷:

import operator
students = [
    student('Alice', 80, 18),
    student('Bob', 90, 19),
    student('Charlie', 70, 17),
    student('David', 85, 18)
  ]
student_tuple = [(s.name, s.score, s.age) for s in students]

sorted_student_tuple2 = sorted(student_tuple, key=operator.itemgetter(0))
print(sorted_student_tuple2)

sorted_students = sorted(students, key=operator.attrgetter('score'))
print(sorted_students)

4.升序和降序:
list.sort() 和 sorted() 接受布尔值的 reverse 参数。这用于标记降序排序。例如,要以反向 age 顺序获
取学生数据:

sorted(student_tuple, key=itemgetter(2), reverse=True)
sorted(students , key=attrgetter('age'), reverse=True)

5.排序稳定性和复杂度:
排序保证是 稳定 的。这意味着当多个记录具有相同的键值时,将保留其原始顺序。

data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
sorted(data, key=itemgetter(0))
[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

注意 blue 的两个记录如何保留它们的原始顺序,以便 (‘blue’, 1) 保证在 (‘blue’, 2) 之前。
这个美妙的属性允许你在一系列排序步骤中构建复杂的排序。例如,要按 grade 降序然后 age 升序对学生数
据进行排序,请先 age 排序,然后再使用 grade 排序:

s = sorted(students, key=attrgetter('age')) # sort on secondary key
>>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key,descending
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

semicolon_helloword

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

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

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

打赏作者

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

抵扣说明:

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

余额充值