0、基础
主要用到
list.sort()
、sorted()
、lambda
进行各种排序操作。其中:
list.sort()
是Python列表的一个内置排序方法,只供list
结构使用,list.sort()
方法排序时直接修改原列表,返回None
。而sorted()
函数接受一切迭代器,返回新列表。相比
list.sort()
,sorted()
使用范围更广,但是如果不需要保留原列表的情况下对列表排序,可以选择list.sort()
方法,不需要复制原有列表,消耗内存小,效率也较高。
list.sort()
list.sort()
函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法
1 | list.sort(cmp=None, key=None, reverse=False) |
- 参数
- cmp:可选参数,如果指定了该参数则使用该参数的方法进行排序,Python3取消了该参数;
- key:用来进行比较的元素,取自可迭代对象中,指定可迭代对象中的一个元素来进行排序;
- reverse:排序规则,
True
降序,False
升序(默认);
- 返回值
- 该方法直接修改原列表,返回
None
;
- 该方法直接修改原列表,返回
示例
1 | # 列表排序 |
sorted()
sorted()
函数对所有可迭代对象进行排序操作。
语法
1 | sorted(iterable, key=None, reverse=False) |
- 参数
- iterable:可迭代对象;
- key:用来进行比较的元素,取自可迭代对象中,指定可迭代对象中的一个元素来进行排序;
- reverse:排序规则,
True
降序,False
升序(默认);
- 返回值
- 返回排序好的列表;
示例
1 | # 排序 |
lambda
Python使用lambda
创建匿名函数,即不使用def
这样的标准语句来定义函数,允许快速定义单行函数,类似于C语言的宏,可以用在任何需要函数的地方。
lambda
的主体是一个表达式,而不是一个代码块,仅能在其中封装有限的逻辑;lambda
函数拥有自己的命名空间,不能访问参数列表之外或全局命名空间里的参数;lambda
并不会带来程序效率的提高,只是使代码更简洁?
语法
1 | lambda [arg1 [,arg2,.....argn]]:expression |
上述用法等价于:
1 | def <lambda>(arg1 [,arg2,......argn]): |
示例
1 | sum = lambda arg1, arg2: arg1 + arg2 |
1、各种排序
1.1、list排序
1 | lis = ['a', 'b', 'c'] |
1.2、dict按key排序
1 | dic = {'c': 1, 'b': 2, 'a': 3} |
1.3、dict按value排序
1 | dic = {'c': 1, 'b': 2, 'a': 3} |
1.4、list内嵌套list排序
1 | lis = [[4, 2, 9], [1, 5, 6], [7, 8, 3]] |
1.5、dict内嵌套dict排序
1 | dic = { |
1.6、list内嵌套dict排序
1 | lis = [ |
1.7、dict内嵌套list排序
1 | dic = { |
1.8、按照多个参数排序
使用operator
模块的itemgetter()
实现。
1 | from operator import itemgetter |
2、其他
list
排序可视情况采用sorted()
或list.sort()
,其他各种排序主要是sorted()
和lambda
的结合操作;
dict
的排序只取其key
,所以需要对value
操作时需要在lambda
中先转换为对应的value
才可以;
排序是稳定的,即如果多个元素有相同的key,则排序前后其先后顺序不变;