从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数。操作对象都是列表
sort 和sorted 区别:
sorted是个内建函数,sort是方法
sort是容器的函数:sort(cmp=None, key=None, reverse=False)
sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False)
- cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
sorted 是可迭代对象,返回一个新的列表。其中的key可以传入函数,对可迭代对象进行操作。默认reverse=False,reverse=False为升序排序;reverse=True为降序排序
翻译:
以升序返回包含ITerable中所有项的新列表。
可以提供自定义键函数来自定义排序顺序,以及
反向标志可以设置为按降序请求结果。
lambda 和 cmp
如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素),那么可以通过compare(x,y)形式自定义比较函数。
compare(x,y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0(根据你的定义)。定义好该函数之后,就可以提供给sort方法作为参数了。内建函数cmp提供了比较函数的默认实现方式:
>>> cmp(42,32)
1
>>> cmp(99,100)
-1
>>> cmp(10,10)
0
>>> numbers = [5,2,9,7]
>>> numbers.sort(cmp)
>>> numbers
[2,5,7,9]
Sorting cmp:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L,cmp=lambda x,y:cmp(x[1],y[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
Sorting keys:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> b=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> sorted(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> b
key的理解 :引入函数,作为对可迭代对象进行操作标准。其中匿名函数中x代表元祖。
>>> student_tuple = [('john', 'A', 15), ('jane', 'B', 12), ('james', 'B', 15)]
>>> sorted(student_tuple, key= lambda x:x[2])
[('jane', 'B', 12), ('john', 'A', 15), ('james', 'B', 15)]
>>> sorted(student_tuple, key= lambda x:x[1])
[('john', 'A', 15), ('jane', 'B', 12), ('james', 'B', 15)]
>>>