龙空技术网

Python中的排序-sorted函数

外星人玩Python 399

前言:

当前同学们对“pythonsortedlamda”可能比较珍视,各位老铁们都想要知道一些“pythonsortedlamda”的相关文章。那么小编同时在网络上汇集了一些有关“pythonsortedlamda””的相关资讯,希望姐妹们能喜欢,大家一起来了解一下吧!

本文对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)]
参数key其实是接受一个函数,这个函数必须只有一个入参和返回一个可比较的值。当sorted函数进行排序,决定谁先谁后的时候,就会把列表中的当前元素传入这个函数,用返回的值来作为判断依据多字段同时排序

有时候我们需要同时对多个字段进行排序,我们来看看怎么做

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会更直观。

标签: #pythonsortedlamda #python sorted从大到小 #输出排序sorded #python排序函数代码 #python排序的函数