Python sort 函数

1. sort 函数

函数原型:

L.sort(*, key=None, reverse=None)

它把 L 原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序!

参数说明:

argumentdescription
*迭代类型的数据列表
key函数类型,比较的原则
reverse为 True 时逆序

Both list.sort() and sorted() have a key parameter to specify a function (or other callable) to be called on each list element prior to making comparisons.



2. 排序方法

2.1 自定义数据类型

首先定义一个 Student 类,每一个对象有学号 num 和名字 name 两个属性,对 Student 列表元素排序

class Student:

class Student:
	def __init__(self, num, name):
		self.num = num
		self.name = name

	def __str__(self):
		return f'{self.num} - {self.name}'

List:

students = [
	Student(5, 'Tom'),
	Student(2, 'Tony'),
	Student(6, 'Lucy'),
	Student(1, 'Jerry')
]

2.2 compare 函数有 1 个参数

key 接受的函数类型要求 函数只有一个参数,默认按返回值的升序对列表元素排序:

cmp2 = lambda stud: stud.num
students.sort(key=cmp2, reverse=False)
for student in students:
	print(student)

结果如下:

1 - Jerry
2 - Tony
5 - Tom
6 - Lucy

2.3 compare 函数有 2 个参数

当比较函数有 2 个参数时,如:

def mycmp(stud1, stud2):
	''' return true when num is greater'''
	return stud1.num - stud2.num

此时需要用到 functools.cmp_to_key():

from functools import cmp_to_key

cmp1 = lambda stud1, stud2: stud1.num - stud2.num
students.sort(key=cmp_to_key(cmp1))
for student in students:
	print(student)

结果如下:

1 - Jerry
2 - Tony
5 - Tom
6 - Lucy

3. 拓展

类似的,max 函数也有参数 key:

a = [('x', 5), ('y', 3), ('z', 8)]
print(max(a, key=lambda x: x[-1]))  # ('z', 8)

完结 🍻

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值