在 Python
中有两种排序的方法:sorted
与 list.sort
sorted(iterable, key=None, reverse=False)
list.sort(key=None, reverse=False))
一、sorted
排序
-
sorted
作为Python
的内置函数,支持的排序对象更广,对任意可迭代的对象,都可以使用sorted
进行排序,如:列表
,元组
,生成器
等 -
sorted
具有返回值,会生成一个新的列表
import random
def gene_data():
"""生产 10 个随机数"""
for _ in range(10):
yield random.randrange(100)
if __name__ == '__main__':
ret = sorted(gene_data())
# 你这里打印的随机数可能会不同
print(ret) # [0, 23, 29, 35, 42, 44, 49, 54, 81, 90]
二、list.sort
排序
- 作为列表附带的方法,
list.sort
只能作用于列表 -
list.sort
是在原列表上直接排序,没有返回值。
三、两种方法对比
- 如果你要对
列表数据
排序,那么使用list.sort
可以节省空间,不需要额外生成新的列表。 - 使用
list.sort
要注意,由于是原地排序,所以无法保留原始数据
四、key
,reverse
参数的使用
-
key
是指排序函数,与java
,javascript
中传递的排序函数不同,这里的key
函数接收迭代元素,并返回一个代表元素大小的关键字
.
构造用来排序的对象
class Person:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def __str__(self):
return self.name
def __repr__(self):
return self.name
排序函数
def key(person: Person) -> int:
"""Person 对象排序的关键字函数
:param person: Person 对象
:return: 代表 Person 对象的关键字
"""
return person.age
运行
if __name__ == '__main__':
son = Person('son', 18)
father = Person('father', 42)
grandfather = Person('grandfather', 66)
family = [father, son, grandfather]
family.sort(key=key)
print(family) # [son, father, grandfather]
family.sort(key=key, reverse=True) # 倒序
print(family) # [grandfather, father, son]
下一篇:Python 的key参数
网友评论