python中列表排序函数之 sort sorted 函数

1.函数用途

我们需要对List进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序
方法2.用内建函数sorted进行排序(从python 2.4开始)

2.函数定义及参数解析

sort函数定义:sort(cmp=None, key=None, reverse=False)

sorted函数定义:sorted(iterable, cmp=None, key=None, reverse=False)

参数解析:

iterable:是可迭代类型;
cmp:用于比较的函数(大于时返回1,小于时返回-1,等于时返回0),比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

         cmp与key均可以采用lambda表达式
reverse:排序规则. reverse = False,默认为False,升序排列或者reverse = True 。

注:python3.x中取消了cmp参数,也不支持直接往sort()里面传函数,但可以构造排序函数传递给key来实现。

3.二者的区别

sort( )函数与sorted( )函数最大的区别是, sort( )函数是对已存在的列表进行操作(改变原列表的值),调用其没有返回值;而sorted( )函数是返回一个新的list,不在原来的list上进行操作(不改变原列表的值),调用其返回一个排好序的list

4.函数示例

L = [5, 2, 3, 1, 4]

#sorted()
>>> sorted(L)

>>>print(L)     #L不改变

>>>print(sorted(L))

[5, 2, 3, 1, 4]   
[1, 2, 3, 4, 5]

#sort()
>>>
>>> L.sort()
>>> print (L)   #L改变
[1, 2, 3, 4, 5]

1、基于key 

接受一个key函数来实现自定义的排序,

key指定的函数将作用于list中的每一个元素上,根据key函数返回的结果进行排序。
L = [(‘a’, 3), (‘d’, 2), (‘c’, 1), (‘b’, 4)]
a = sorted(L, key=lambda x : x[0])
b = sorted(L, key=lambda x : x[1])
print L
print a
print b
输出:
[(‘a’, 3), (‘d’, 2), (‘c’, 1), (‘b’, 4)]
[(‘a’, 3), (‘b’, 4), (‘c’, 1), (‘d’, 2)]
[(‘c’, 1), (‘d’, 2), (‘a’, 3), (‘b’, 4)

注:lambda匿名函数(也叫lambda表达式)的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。

来看看字符串排序的问题:

>>> sorted(['abc','Abc','Cba','bAc'])
['Abc', 'Cba', 'abc', 'bAc']

默认的,对于字符串,sorted函数按照ASCII的大小进行排序,因为C

如果我们想要达到忽略大小写的排序,只需要更改一下key函数:

>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower)
['abc', 'Abc', 'bAc', 'Cba']

结合lambda关键字按年龄排序:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #按年龄排序

#输出结果
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

进一步,要进行反向排序,可以传入第三个参数reverse=True:

>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower,reverse=True)
['Cba', 'bAc', 'abc', 'Abc']

2、基于reverse
L = [2, 1, 4, 9, 6]
a = sorted(L, reverse=True)
b = sorted(L, reverse=False)
print L
print a
print b
输出:

[2, 1, 4, 9, 6]
[9, 6, 4, 2, 1]
[1, 2, 4, 6, 9]

你可能感兴趣的:(Python学习1)