目录
使用reverse指定排序顺序
使用key指定排序规则
使用匿名函数制定规则
定义比较函数制定规则
制定多规则
多复杂规则排序
sort()是python非常好用的排序函数,可以对一个列表进行排序,这个排序只是会修改原列表,不会创建新的列表
使用格式为list.sort(key, reverse)
key :指定排序规则
reverse :指定升序降序,默认升序,True表示逆转即降序、False表示不逆转即还是默认升序;
使用reverse指定排序顺序
例如将列表降序排序
L=[45,52,14,25,26,17]
L.sort(reverse=True)
print(L)
结果为
对一个字符列表进行排序默认按字典序排序
L=['g','a','f','h','b','m','n']
L.sort()
print(L)
这里没有指定reverse,所以默认升序排序
使用key指定排序规则
使用匿名函数制定规则
lambda 参数:操作(参数)
按除以6的余数大小进行升序排序
结果
定义比较函数制定规则
如果函数很复杂时可以分开写,不用匿名函数,只需要先定义比较函数,然后让key=比较函数即可,注意key=函数名称,函数名称不用加()
例如按照字符串的长度来排序,len函数用于求字符串的长度,是系统自带的
L=['aaaaa','aa','aaaa','a']
L.sort(key=len)
print(L)
结果
自己定义一个比较函数fun,要求按照数的绝对值进行升序排序
def fun(x):return abs(x)L=[24,-41,21,11,-13]
L.sort(key=fun)
print(L)
结果
先定义比较函数fun用于求绝对值,然后将fun函数传给了key参数,sort方法会遍历列表,将每一个遍历到的元素传入fun函数作为形参x,而fun函数的返回值将作为对应列表元素的排序规则
要求按照数的绝对值进行降序排序,配合使用reverse
def fun(x):return abs(x)L=[24,-41,21,11,-13]
L.sort(reverse=True,key=fun)
print(L)
结果
规则比完的话比完如果都一样,则按原来的顺序不变,例如15和-15绝对值一样,排序完后所以还是按原来的位置不变,15还是在-15前面
def fun(x):return abs(x)L=[15,26,45,-33,-15]
L.sort(key=fun)
print(L)
结果
制定多规则
要求先按x的绝对值从小到大排序,如果绝对值相等就按x从小到大排序
fun函数先返回x的绝对值,再返回x
L=[15,-15,12,78,45]
def fun(x):return (abs(x),x)L.sort(key=fun)
print(L)
结果
要求先按x的绝对值从小到大排序,如果绝对值相等就按x从大到小排序
L=[15,-15,12,78,45]
def fun(x):return (abs(x),-x)L.sort(key=fun)
print(L)
结果
因为默认是为升序,先按照abs(x)进行升序,如果abs(x)相同的话,则继续按照-x进行升序排序。而对-x进行升序,实际上就是按照x进行降序。
L中每一行第一个元素为每个同学的身高,第二个为体重,要求按身高从小到大排序,身高相等的按从大到小排序
L=[[180,90],[160,50],[160,60],[150,70]]def fun(x):return (x[0],-x[1])L.sort(key=fun)
print(L)
结果
多复杂规则排序
以下代码要求按第一个元素绝对值从小到大排序,如果绝对值相等就按第二个元素绝对值模6从大到小排序
L=[[-13,10],[16,13],[13,6],[23,16]]def fun1(x):return abs(x)def fun2(x):return abs(x)%6def fun(x):return (fun1(x[0]),fun2(x[1]))L.sort(reverse=True,key=fun)
print(L)
结果
类似的,max()函数是用来求一个列表的最大值,也可以像sort()函数一样用key指定比较规则,例如使用max分别求列表最大的数和绝对值最大的数
L=[12,-45,52,41,-74,15]
print(max(L))
print(max(L,key=abs))
结果