一、介绍
list.sort( key=None, reverse=False)
参数key的作用是什么呢?
总的来说,我们可以利用它实现按我们想要的标准进行排序,即我们可以自定义排序的标准,或者称为自定义排序的方式。参数key是某个函数的返回值,这个函数的输入参数只有一个,那就是我们要待排序的列表的每一个元素(相当于待排序列表中有多少个元素就执行多少次这个函数),这个函数的返回值作为我们对列表元素进行排序的依据。
list1 = [[1, 7], [1, 5], [2, 4], [1, 1]] list1.sort(key=lambda x:x[1]) print(list1) ”“” [[1, 1], [2, 4], [1, 5], [1, 7]]返回值是第2个元素,所以是按照第1个元素大小排序 “”“
list1 = ['baidu', 'CSDN', 'QQ', 'Google', 'suwenhao'] list1.sort(key=lambda x1: len(x1)) 或者list1.sort(key=len) ”“” ['QQ', 'CSDN', 'baidu', 'Google', 'suwenhao'],函数返回值是长度,因此是由元素长度排序 “”“”
二、案例
将ls[5,‘a’,8,‘z’,‘e’,0,7,‘m’]排序,排序规则所有数字在字母前,数字间按大小排序,子母间相对位置不变。
#构建排序函数 f = lambda x: (0,x) if type(x)==type(0) else (1,) ls = ls.sort(key=f)
上述函数意为当x的类型是数字型时,返回(0,x),否则则返回(1,)。
python中对元组比大小时先比较第一个元素,若相同则向后继续比较。故以自定义函数f进行排序时,先比较返回的第一个元素(0或1),将所有数字元素前置,字母元素后置。如果是数字元素再按返回元组第二个元素排序,进行数字键排序;若为字母,由于排序稳定,相对位置不变。k这个函数参数是迭代对象每个元素,返回值是比较的内容
ls = [19,42, {'name':'zhangsan','age':18}, {'name':'lisi','age':12}, {'name':'wangwu','age':23} ] print(isinstance(0 ,int)) ls.sort(key= lambda x: x['age'] if isinstance(x,dict) else x) print(ls) “”“ [{'name': 'lisi', 'age': 12}, {'name': 'zhangsan', 'age': 18}, 19, {'name': 'wangwu', 'age': 23}, 42] ”“”