当前位置:   article > 正文

Python sort 函数

Python sort 函数

1. sort 函数

函数原型:

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

它把 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}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

List:

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

2.2 compare 函数有 1 个参数

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

cmp2 = lambda stud: stud.num
students.sort(key=cmp2, reverse=False)
for student in students:
	print(student)
  • 1
  • 2
  • 3
  • 4

结果如下:

1 - Jerry
2 - Tony
5 - Tom
6 - Lucy
  • 1
  • 2
  • 3
  • 4

2.3 compare 函数有 2 个参数

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

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

此时需要用到 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
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下:

1 - Jerry
2 - Tony
5 - Tom
6 - Lucy
  • 1
  • 2
  • 3
  • 4

3. 拓展

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

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

完结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/197396
推荐阅读
相关标签