Python--如何排序

来源:互联网 发布:局域网上网限制软件 编辑:程序博客网 时间:2024/06/10 23:52
    以下内容基本是从Python3.6的帮助文档中摘取部分翻译的

 Python内置的list.sort()方法可以原地修改列表,进行排序,同时还有sorted()内置方法对一个可迭代对象进行排序,并返回排序后的列表。
基本排序
简单的升序排序非常简单,只需调用sorted()函数
>>> sorted([2,3,5,48,7])[2, 3, 5, 7, 48]
如果你不需要原来的列表,那么直接使用list.sort()方法是更有效率的
>>> list1 = [3,2,1,9,8,7]>>> list1.sort()>>> list1[1, 2, 3, 7, 8, 9]
list.sort()和sorted()的另一个差异是list.sort()方法只适用列表,而sorted()方法可以接受任何可迭代对象作为参数
Key函数
list.sort()和sorted都有一个key参数用来指定一个函数用来比较
例如:一个大小写不敏感的排序
>>> sorted("This is a test string".split(), key=str.lower)['a', 'is', 'string', 'test', 'This']
在实际中处理的是更复杂的对象,例如:
>>> student_tuple = [...     ('zhangsan','A',15),...     ('lisi','B',12),...     ('wangwu','B',10),>>>>>> sorted(student_tuple,key=lambda student:student[2])[('wangwu', 'B', 10), ('lisi', 'B', 12), ('zhangsan', 'A', 15)]
这种方法对类的属性也适用
Operator模块的函数
   上面使用key函数作为参数是非常常见的,所以Python提供了更方便的函数,Operator模块有itemgetter(),attrgetter()和methodcaller()函数。
使用这些函数,上面的例子会变得非常简单且高效。
>>> from operator import itemgetter,attrgetter>>> sorted(student_tuple,key=itemgetter(2))[('wangwu', 'B', 10), ('lisi', 'B', 12), ('zhangsan', 'A', 15)]
升序和降序
list.sort和sorted()都接收一个布尔值的reverse参数,用来是否是降序(默认排序是升序)。
>>> sorted(student_tuple,key=itemgetter(2),reverse=True)[('zhangsan', 'A', 15), ('lisi', 'B', 12), ('wangwu', 'B', 10)]
老的方式使用cmp参数
在Python2.4以前,Python没有sorted内置函数,list,sort()也没有key参数,当时Py2.0是使用cmp参数来处理特殊的排序的。
在Py3.0中,cmp参数被完全移除。
在Py2.0中,sort允许调用一个函数用来做比较,例如:
>>> def numeric_compare(x,y):...     return x- y...>>> sorted([5,2,4,1,3],cmp=numeric_compare)[1, 2, 3, 4, 5]


原创粉丝点击