python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。
sorted语法结构
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:为可迭代序列
cmp 和 key 均为比较函数,在python2.4前,sorted()和list.sort()函数没有提供key参数,但是提供了cmp参数来让用户指定比较函数。
reverse:为排序方向,False为正序,True为反序
基本用法
list 排序
sort () 方法会修改原有的list
>>> a = [2,4,5,3,1]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
>>> a = [2,4,5,3,1]
>>> sorted(a)
[1, 2, 3, 4, 5]
>>> a
[2, 4, 5, 3, 1]
此外sorted()方法对所有的可迭代序列都有效
>>> sorted({1:'b',2:'d',3:'e',4:'g',5:'f'})
[1, 2, 3, 4, 5]
key参数/函数
key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。
例如通过key指定的函数来忽略字符串的大小写
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
如:对学生的按姓名排序
>>> student_tuples = [('john','A',15),('jane', 'B', 12),('dave', 'B', 10),]
>>> sorted(student_tuples, key=lambda student: student[0])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Operator 模块函数
>>> from operator import itemgetter,attrgetter
>>> sorted(student_tuples, key=itemgetter(2)) #按照年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_tuples, key=itemgetter(0)) #按照姓名排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15
例如对上面的student年龄降序排序如下:
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_tuples, key=itemgetter(2),reverse=True) #降序排序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]