咱们须要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序方法2.用内置函数sorted进行排序(从2.4开始)java
sortedpython
sorted() 函数对全部可迭代的对象进行排序操做面试
sortapp
sort() 函数用于对原列表进行排序,若是指定参数,则使用比较函数指定的比较函数函数
参数说明ui
原型:sort(key,reverse=False)key:用来指定一个函数,此函数在每次元素比较时被调用,此函数表明排序的规则,也就是你按照什么规则对你的序列进行排序;reverse:是用来代表是否逆序,默认的False状况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。注;通常来讲,cmp和key可使用lambda表达式spa
sort()与sorted()的不一样在于,sort是在原位从新排列列表,而sorted()是产生一个新的列表。code
sort 是应用在 list 上的方法,sorted 能够对全部可迭代的对象进行排序操做。对象
list 的 sort 方法返回的是对已经存在的列表进行操做,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操做。排序
示例一
区别:对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。而对于一样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
示例二
假设用元组保存每个学生的信息,包括学号,姓名,年龄。用列表保存全部学生的信息。
小结:由示例能够看出,当列表由list(或者tuple)组成时,默认状况下,sort和sorted都会根据list[0](或者tuple[0])做为排序的key,进行排序。以上都是默认的排序方式,咱们能够编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数
基于key函数排序
基于reverse函数
小结:reverse=False为升序排序(默认);reverse=True为降序排序
要求
a. 全部的正数排前面,全部的负数排后面
b. 若是两个数同是正数或者同是负数,那么全部非浮点数排前面,全部浮点数排后面
c. 若是两个数正负数类型相同,是不是浮点数的结果也相同,那么按两个数的绝对值大小比较,绝对值小的排前面,绝对值大的排后面
上面程序运行结果是:
在本例子中有一句 lambda x: (x < 0, isinstance(x, float), abs(x)),这其实就是 python 里面的 lambda 表达式
1.什么是 lambda 表达式
python 语言中,lambda 表达式就至关于一个只有一句代码的函数:
至关于函数:
这个函数返回的是一个元组
2.什么是 sorted 函数
sorted 函数第一个参数是要排序的列表,默认会把列表中的元素从小到大进行排序 key 参数接受一个 Callable 对象,好比 lambda 表达式,key 默认值为 None ;若是 key 参数为 lambda 表达式,在对列表中每一个元素排序的时候,会执行 lambda 表达式的语句,根据 lambda 表达式的返回值,决定每一个元素的大小,这个例子里,其实就是元组和元组比较大小,相似于 (True, False, 19) 和 (True, True, 10) 元组比较大小,默认小的排前面,大的排后面
3.元组大小如何比较
元组比较大小,实际上是比较元组中对应元素的大小 好比:
先比较 a1 和 b1 的大小,若是 a1 > b1, 那么 t1 > t2; 若是 a1 < b1,那么 t1 < t2; 若是 a1 == a2, 那么继续比较第二个元素大小,元组的大小由第二个元素大小决定,若是第二个元素也相等,那么比较第三个元素大小,依次类推。。。
4.本案例排序规则是什么
lambda x: (x < 0, isinstance(x, float), abs(x)) 这个 lambda 表达式定义的排序规则是: a. 全部的正数排前面,全部的负数排后面 b. 若是两个数同是正数或者同是负数,那么全部非浮点数排前面,全部浮点数排后面 c. 若是两个数正负数类型相同,是不是浮点数的结果也相同,那么按两个数的绝对值大小比较,绝对值小的排前面,绝对值大的排后面
好比 -5 和 2.3 比较大小 实际上是 (-5<0, isinstance(-5, float), abs(-5)) 和 (2.3<0, isinstance(2.3, float), abs(2.3)) 这两个元组比较大小
因此至关于
这两个元组比较,(True, False, 5) 是大于 (False, True, 2.3) 的,因此排序的时候 2.3 排前面,-5 排后面。
识别图中二维码,欢迎关注python宝典