一位Python大牛对Python排序方法的十条用法总结

sorted 用于对集合进行排序(这里说的集合是对可迭代对象的一个统称,他们可以是列表、字典、set、甚至是字符串),它的功能非常强大,本文将深入浅出地介绍 sorted 的各种使用场景。

本文福利:私信回复【PDF】可获取Python电子书一套

1、默认情况,sorted 函数将按列表升序进行排序,并返回一个新列表对象,原列表保持不变,最简单的排序

2、降序排序,如果要按照降序排列,只需指定参数 reverse=True 即可

3、如果要按照某个规则排序,则需指定参数 key, key 是一个函数对象,例如字符串构成的列表,我想按照字符串的长度来排序

len 是内建函数,sorted 函数在排序的时候会用len去获取每个字符串的长度来排序。 有些人可能使用匿名函数 key=lambda x: len(x) ,其实多此一举。

4、如果是一个复合的列表结构,例如由元组构成的列表,要按照元组中的第二个元素排序,那么可以用 lambda 定义一个匿名函数

这里将按照字母 A-C-D 的顺序排列。

5、如果要排序的元素是自定义类,例如Student类按照年龄来排序,则可以写成

6、和数据库的排序一样,sorted 也可以根据多个字段来排序,例如我有先要根据age排序,如果age相同的则根据grade排序,则可以使用元组:

7、前面碰到的排序场景都是建立在两个元素是可以互相比较的前提下,例如数值按大小比较, 字母按顺序比较,如果遇到本身是不可比较的,需要我们自己来定义比较规则的情况如何处理呢?

举个简单的例子:

一个整数列表中,可能有数字,字符串,在Python3中,字符串与数值是不能比较的,而Python2中任何类型都可以比较,这是两个版本中一个很大的区别:

我们需要使用 functools 模块中的 cmp_to_key 来指定比较函数是什么。

8、关于 sorted 函数,Python2和Python3之间的区别是Python2中的sorted 可以指定cmp关键字参数,就是当遇到需要自定义比较操作的数据可以通过 cmp=compare 来实现,不需要像Python3中还需要导入functools.cmp_to_key实现。

其实,在Python2中,上面这种情况你不指定cmp,默认也会按照这种方式排序,记住,Python2中,任何东西(不同类型之间)都可以比较,而Python3只有同类型数据可以比较。

9、 对于集合构成的列表,有一种更高效的方法指定这个key

10、同样的,对于自定义类,也有一种更高效的方法指定key

如果参与排序的字段有两个怎么办,你可以这样:

以上是关于 sorted 函数的全部。

欢迎留言评论!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190810A08FMZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励