继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

python内置的排序方法

它没有心_0
关注TA
已关注
手记 4
粉丝 3
获赞 14

Python 内置的 sort() 方法可以实现对列表的原地排序功能。内置的 sorted() 函数则不会修改原列表,而是生成一个经过排序的新列表。

下面总结一些常用的排序方法。

基本排序
最简单的方法就是使用 sorted() 函数,它将返回一个经过排序的新列表:

sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
你也可以使用 list.sort() 方法, 但是它会修改原列表,所以一般使用 sorted()。如果你不再需要原始列表的话,用用 list.sort() 也无妨。

a = [5, 2, 3, 1, 4]
a.sort()
a
[1, 2, 3, 4, 5]
另一个不同点是,list.sort() 方法只能作用于列表,而 sorted() 函数则接受任何可迭代对象。

sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
Key 函数
从 Python 2.4 开始, list.sort() 及 sorted() 增加了一个 key 参数,该参数接受一个函数作为它的值,可以通过那个函数定义排序应该遵循的规则。

比如,对字符串做不区分大小写的排序:

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

对照

sorted("This is a test string from Andrew".split())
['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
key 参数的值必须是个函数,该函数有一个参数(列表元素)并且返回一个用来排序的 key(按这个 key 进行排序)。

一般通过使用对象的某个索引作为 key 的值来对复杂对象进行排序。比如对一个多维数组进行排序:

student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]

按列表元素(元组)的第3个值排序

sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
这个技术也可以用来按对象的属性值进行排序。比如:

class Student:
def init(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def repr(self):
return repr((self.name, self.grade, self.age))

student_objects = [
Student('john', 'A', 15),
Student('jane', 'B', 12),
Student('dave', 'B', 10),
]

按 age 属性的值排序

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

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP