sorted和sort的异同
不同之处
sort 只适用于list类型的数据,而sorted适用于一切python序列类型,包括可变类型(list, dict, set)和不可变类型(frozenset, str)等一切实现了__iter__方法的可迭代对象。
sort是在原列表上进行排序(可通过id方法查看内存地址不变),返回值是None
sorted会创建一个新的列表存放排序结果,无论排序的是什么类型,最终返回值都是list
tip:所以这里要注意sort返回值是None,不能对返回值进行链式调用
# 两个函数返回值的比较
>>> print([5,4,3,2,1].sort())
None
>>> print(sorted([5,4,3,2,1]))
[1, 2, 3, 4, 5]
相同之处
sort(self, /, *, key=None, reverse=False)
sorted(iterable, /, *, key=None, reverse=False)
从上面可以看到二者的参数定义,都接受两个关键参数 key 和 reverse
key: 一个只有一个参数的方法,这个函数会被作用在每个元素上,该方法所产生的结果将作为排序比较的标准,默认值为元素本身的大小。
reverse:值为True时为降序排序,值为False时为升序排序,默认值为False。
key 关键字的用法
sort为list的内置函数,使用范围不大,但是如果序列是为list时使用sort的性能是优于sorted的,这里我们还是以sorted为基础,重点看一下key 关键字的不同应用场景,以下不涉及reverse参数,默认都是升序排序。
字典排序
先看一个例子
>>> sorted(dict(小明=18, 小红=17, 小白=20))
['小明', '小白', '小红']
上面给出的字典排序最终返回结果是有keys,这在实际应用场景中肯定是不行的。看以下代码,使用items()方法将字典元组化,key关键字接受一个匿名函数,这里x是每个元组,取元组下标为1代表是字典的value,按照value进行排序,排序完成后将使用字典工厂函数将元组恢复成字典。
>>> d = dict(小明=18, 小红=17, 小白=20)
>>> dict(sorted(d.items(), key=lambda x:x[1], reverse=True))
{
'小白': 20, '小明': 18, '小红': 17}
列表排序
其实我们从上面可以看出,字典排序的本质就是将字典转为元组再进行排序的,那么对于元组或者列表的排序也是一样的道理,看一下列表排序
>><