Python 中的排序工具:sort 与 sorted 详解
转载请注明出处:https://blog.youkuaiyun.com/jpch89/article/details/84324272
文章目录
0. 参考资料
1. 排序基础
Python
中提供了两种排序工具:
list.sort()
方法,它会修改原列表。sorted()
内置函数,从可迭代对象生成一个新的排序后的列表。
最基本的升序排序很简单:
- 调用
sorted()
函数,返回一个排序过的列表,不修改原列表。
>>> old_list = [1, 4, 5, 3, 2, 8, 7]
>>> new_list = sorted(old_list)
>>> new_list
[1, 2, 3, 4, 5, 7, 8]
>>> old_list # 不改变原列表
[1, 4, 5, 3, 2, 8, 7]
- 也可以用
list.sort()
方法,它会修改原列表,返回None
。通常它没有sorted()
方便,但是如果不需要原列表的话,它更高效些。
>>> old_list
[1, 4, 5, 3, 2, 8, 7]
>>> old_list.sort()
>>> old_list
[1, 2, 3, 4, 5, 7, 8]
注意:
由于list.sort()
方法返回的是None
,所以如果错误地写出old_list = old_list.sort()
这样的代码,就会丢失old_list
的所有数据。
- 还有一个区别是,
list.sort()
方法只有列表可以使用,而sorted()
函数可以作用于任何可迭代对象。
>>> sorted({
1: 'D', 4: 'B', 2: 'C', 3: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
2. key 参数
list.sort()
和 sorted()
都有一个 key
参数,它接收一个函数 function
,比较之前会对每个元素调用一次。
比如下面是忽略大小写的字符串比较。
- 使用
sorted()
函数:
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
- 使用
list.str()
方法:
>>> strings = "This is a test string from Andrew".split()
>>> strings.sort(key=str.lower)
>>> print(strings)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key
参数的值应该是一个函数,这个函数接收一个参数,返回一个用于排序的键。
key
函数对每一个元素调用一次。
def key_func(x):
print('我被调用了')
return x.lower()
strings = "This is a test string from Andrew".split()
strings.sort(key=key_func)
print(strings)
"""
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
"""
比较常见的一个应用场景是取对象的某个索引作为键。
student_tuples