快捷搜索:  汽车  科技

sorted函数python:Python中的排序-sorted函数

sorted函数python:Python中的排序-sorted函数sorted: [('L' 'C' 1) ('zhang' 'A' 2) ('wang' 'B' 3)] 参数key其实是接受一个函数,这个函数必须只有一个入参和返回一个可比较的值。当sorted函数进行排序,决定谁先谁后的时候,就会把列表中的当前元素传入这个函数,用返回的值来作为判断依据多字段同时排序有时候我们需要同时对多个字段进行排序,我们来看看怎么做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) 输出:s

sorted函数python:Python中的排序-sorted函数(1)

本文对Python中的排序函数sorted做一个简单的介绍。注意只对python3.0或以后的版本有效,对于旧版本就不特别说明。

对列表排序

注意sorted函数是不会修改原列表,他会返回一个结果的新列表对象。

nums=[5 4 3 2 1] print('源:' nums) # 默认是升序 res=sorted(nums) print('sorted:' res) # 降序只需要设置参数reverse=True res=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会更直观。

猜您喜欢: