sorted()函数和sort()方法应用于列表的区别是,sort函数的作用
1.列表。sort () 2。已排序()3。操作员模块功能概述
1.list.sort()
List.sort (*,key=none,reverse=false)该方法对列表进行就地排序,
默认排序为升序
。如果任何比较操作失败,则整个排序操作将失败(并且列表可能处于部分修改的状态)。(注意只有list才有这个排序功能,而且排序方法也只是为list定义的)。函数参数定义:
指定带有一个参数的函数
,用于从每个列表元素中提取比较键(例如,key=str.lower)。它可以是匿名函数或用户定义的函数。key函数排序的过程中,对应于列表中每一项的键会被计算一次
。默认值 None 表示直接对列表项排序而不计算一个单独的键值
。Reverse:布尔值的反向参数。这用于标记降序排序。如果reverse为真,则意味着降序排序。默认值为False。
示例:
key为None:
A=[5,2,3,1,4] A. Sort () A [1,2,3,4,5] Common
设置key的例子
,使用对象的一些索引作为关键字对复杂对象进行排序。def take second(elem):return elem[1]# list r=[(2,2),(3,4),(4,1),(1,3)] #指定第二个元素sort r . sort(key=take second)print(r)r . sort(True)print(r)#或通过匿名函数定义key# r.sort(key=lambda x: x[1])。输出如下所示
更多内容(可用)
python 2.x中没有key参数,但是使用了cmp参数,类似于c中qsort的实现,传入的cmp参数表示排序的顺序。对于qsort,可以参考使用qsort。为了向后兼容,可以使用functools.cmp_to_key()将2.x样式的cmp函数转换为键函数。
在Py2.x中,sort允许调用一个可选函数进行比较。这个函数应该比较两个参数,然后返回小于的负值,如果相等则返回零,大于或大于的正值。例如,我们可以这样做:
在python3中,cmp可以通过functools.cmp_to_key()转换成key函数。
这个functools.cmp_to_key()的具体实现是如下的包装器,可以了解一下。
def cmp_to_key(mycmp):将一个cmp=函数转换为key=函数 class K: def __init__(self,obj,* args):self . obj=obj def _ _ lt _ _(self,other . obj):return mycmp(self . obj,other.obj) 0 def __eq__(self,other): return mycmp(self.obj,other.obj)==0 def __le__(self,other): return mycmp(self.obj=0返回K
reverse
是一个布尔值。每个列表元素将按反向顺序比较进行排序
,如果设置为真。A=[5,2,3,1,4] A. Sort (reverse=true) A [5,4,3,2,1]当一个大尺寸的链表被排序时,这种方法会就地修改顺序,以保证空间经济性。提醒用户这个操作是间接完成的,它不会返回排序后的序列(请使用sorted()显式请求一个新的排序列表实例)。
sort() 方法确保排序是稳定的。 如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的
—这有利于多重排序(例如,先按部门排序,再按薪级排序)。CPython实现细节:在对一个列表进行排序的过程中,试图改变甚至检测也会造成未定义的效果。Python的c实现在排序过程中会将列表显示为空,如果在排序过程中发现列表发生了变化,会抛出ValueError。
2.Sorted()根据iterable中的
返回一个新的已排序列表
项排序(iterable,*,key=none,reverse=false)。Sorted函数可以接受任何iterable对象,sorted()返回一个新的排序列表。key,reverse参数与list.sort()方法的参数具有相同的含义。而且它还可以使用functools.cmp_to_key()将老式的cmp函数转换成key函数,sorted()也可以保证排序稳定。
与sort方法不同,sort方法返回新的排序列表,而sort方法直接修改原始列表(并返回None以避免混淆)。另外,list.sort()方法只为list定义,而sorted()函数可以接受任何iterable对象。
例子
关键是无
Sorted([5,2,3,1,4])[1,2,3,4,5]对列表类型以外的可迭代对象进行排序。
已排序({1: D ,2: B ,3: B ,4: E ,5: A})[1,2,3,4,5]
3.运算符模块函数上图所示的关键函数模式很常见,所以Python提供了便利函数,使得取值函数更加简单快捷。运算符模块有itemgetter()、attrgetter()和methodcaller()函数。
使用这些函数,上述示例可以变得更简单、更快速:
关于methodcaller()函数的使用请参考https://blog.csdn.net/qq_41158271/article/details/108665918。
此外,操作员模块功能允许
多级排序
。比如先按年级排序,再按年龄排序。
需要注意的一点:Python 中这两个内置函数,使用的 Timsort 算法,时间复杂度为 O ( N l o g N ) O(Nlog N) O(NlogN)
summary排序方法只为list定义,sorted适用于任何iterable对象。sort方法就地对列表进行排序,并返回None。sorted方法返回一个新的排序列表。对于大尺寸的列表,使用sort方法来就地修改顺序以确保空间经济性是非常常见的。所以python提供的运算符模块函数,让取值函数变得更加简单快捷。有关这两种方法的更多详细信息,请参见官方排序部分,链接如下:
https://docs . python . org/zh-cn/3.7/how to/sorting . html # sorting how to