python sorted是怎样的呢?下面就让我们一起来了解一下吧:
sorted是属于python下的一个函数,sorted()函数是用于对所有可迭代的对象进行排序操作。
它与sort 是有一定区别的,具体的区别是:
sort通常是应用在list上的方法,而sorted则能够对所有可迭代的对象进行排序操作。
list中的sort方法一般返回的是对已经存在的列表进行操作,无返回值,但是内建函数sorted方法返回的是一个新的list,因此它并不是在原有的基础上进行操作。
语法格式:
sorted(iterable, cmp=None, key=None, reverse=False)
参数:
iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
参考范例:
>>>a=[5,7,6,3,4,1,2]>>>b=sorted(a)#保留原列表>>>a[5,7,6,3,4,1,2]>>>b[1,2,3,4,5,6,7]>>>L=[('b',2),('a',1),('c',3),('d',4)]>>>sorted(L,cmp=lambdax,y:cmp(x[1],y[1]))#利用cmp函数[('a',1),('b',2),('c',3),('d',4)]>>>sorted(L,key=lambdax:x[1])#利用key[('a',1),('b',2),('c',3),('d',4)]>>>students=[('john','A',15),('jane','B',12),('dave','B',10)]>>>sorted(students,key=lambdas:s[2])#按年龄排序[('dave','B',10),('jane','B',12),('john','A',15)]>>>sorted(students,key=lambdas:s[2],reverse=True)#按降序[('john','A',15),('jane','B',12),('dave','B',10)]>>>以上就是小编的分享了,希望能够帮助到大家。
Python中的排序-sorted函数
本文对Python中的排序函数sorted做一个简单的介绍。注意只对python3.0或以后的版本有效,对于旧版本就不特别说明。
对列表排序注意sorted函数是不会修改原列表,他会返回一个结果的新列表对象。
nums=[5,4,3,2,1]print('源:',nums)# 默认是升序res=sorted(nums)print('sorted:',res)# 降序只需要设置参数reverse=Trueres=sorted(nums,reverse=True)print('sorted reverse:',res)
输出:
源: [5, 4, 3, 2, 1]sorted: [1, 2, 3, 4, 5]sorted reverse: [5, 4, 3, 2, 1]复杂结构的排序
nums=[('zhang','A',2),('wang','B',3),('L','C',1)]res=sorted(nums)print('sorted:',nums)
输出:
sorted: [('L', 'C', 1), ('wang', 'B', 3), ('zhang', 'A', 2)]
· 可见,正常情况下,只对列表中的元组的第一个元素作为标准进行排序(实际上是对元组进行排序,而元组的比较规则是从第一个元素开始比较,如果相同则依次往后的元素做比较)。
· 需要指定其他的标准作为排序规则,我们可以通过设置key参数
使用参数key进行自定义规则排序nums=[('zhang','A',2),('wang','B',3),('L','C',1)]# 按元组中的第3个元素进行排序res=sorted(nums,key=lambda x:x[2])print('sorted:',res)
输出:
sorted: [('L', 'C', 1), ('zhang', 'A', 2), ('wang', 'B', 3)]使用参数key进行自定义规则排序
nums=[ ('zhang','A',2), ('wang','B',3), ('L','C',1)] # 按元组中的第3个元素进行排序res=sorted(nums,key=lambda x:x[2])print('sorted:',res)
输出:
sorted: [('L', 'C', 1), ('zhang', 'A', 2), ('wang', 'B', 3)]
有时候我们需要同时对多个字段进行排序,我们来看看怎么做
nums=[ ('A',1,'id1'), ('B',39,'id2'), ('B',38,'id3'), ('B',37,'id4'), ('C',2,'id5')] res=sorted(nums,key=lambda x: (x[0],x[1]) )print('sorted:',res)
输出:
sorted: [('A', 1, 'id1'), ('B', 37, 'id4'), ('B', 38, 'id3'), ('B', 39, 'id2'), ('C', 2, 'id5')]
这里是利用之前说到的元组比较规则来进行多个字段同时参与排序。因此我们只需要在key中设置的函数中返回一个元组即可
但是,上面的排序只能是单纯的升序或降序。如果需要第一个元素降序,第二个元素升序,怎么做
nums=[ ('A',1,'id1'), ('B',39,'id2'), ('B',38,'id3'), ('B',37,'id4'), ('C',2,'id5')]# 要注意调用的顺序,这里是从最后规则开始(也就是先对第二个元素做升序)res=sorted(nums,key=lambda x: x[1] )res=sorted(nums,key=lambda x: x[0],reverse=True )print('sorted:',nums)
输出:
sorted: [('C', 2, 'id5'), ('B', 37, 'id4'), ('B', 38, 'id3'), ('B', 39, 'id2'), ('A', 1, 'id1')]
python的sorted函数是稳定的。就是说如果多个元素有相同的key,则排序前后他们的先后顺序不变。做不一致升降序的时候利用这个前提条件,就可以做到
最后综合来说,使用sorted函数可以满足一般的排序需求。虽然本文例子的集合都是list,但排序是可以针对其他集合,而集合的元素也是可以是任意的。此外,python提供了一个模块可以让你不需要写lambda即可操作(比如:operator),但个人觉得对于教学来说自己写lambda会更直观。