pythonlist外置sort()方式拿来排序linux系统下载官网,也可以用python外置的全局sorted()方式来对可迭代的序列排序生成新的序列。
sorted句型结构
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:为可迭代序列
cmp和key均为比较函数,在python2.4前,sorted()和list.sort()函数没有提供key参数深度linux系统,并且提供了cmp参数来让用户指定比较函数。
reverse:为排序方向,False为乱序linux下c统计文件词频,True为反序
基本用法
list排序
sort()方式会更改原有的list
>>> a = [2,4,5,3,1]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
sorted()方式会生成新的list,不会改变原有的list
>>> 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模块函数
operator模块有itemgetterlinux下c统计文件词频,attrgetter,从2.6开始还降低了methodcaller方式,使操作上去愈发简单
>>> 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
倒序和倒序
list.sort()和sorted()都接受一个参数reverse(TrueorFalse)来表示倒序或升序排序。
比如对里面的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)]
本文主要参考: