python列表的排序

来源:互联网 发布:租车平台 源码php 编辑:程序博客网 时间:2024/06/11 18:52

列表排序有三种方法:

reverse()方法、sort()方法、sorted()方法。


1.reverse():

列表反转排序。把原列表中的元素顺序从左至右反转过来重新存放,而不会对列表中的参数进行排序整理,即不会根据大小排序。

eg:

list1=['d',6,'e',5,'f',4]

list1.reverse()

list1

>>>[4, 'f', 5, 'e', 6, 'd']


2.sort():

对列表内容进行升序排序,直接修改原列表的排序,排序后的新列表会覆盖原列表。

eg:

list1=['e',6,'d',5,'f',4]

list1.sort()

list1

>>>[4, 5, 6, 'd', 'e', 'f']


3.1 sorted():

排序时保留原列表,返回一个排序好的新列表。

eg:

list1=['e',6,'d',5,'f',4]

list2=sorted(list1)

list2

>>>[4, 5, 6, 'd', 'e', 'f']


3.2 sorted([data] [,cmp=None、key=None] [,reverse=False])   [ ]内的部分表示可省

data是待排序数据,可以是list或者iterator,cmp和key都是函数,这两个函数作用于data的元素上产生一个结果,sorted()方法根据这个结果来排序。

cmp(e1,e2)是带两个参数的比较函数,返回值:-1表示:e1<e2   0表示:e1==e2    1表示:e1>e2 。 cmp默认None(用内建的比较函数)。

key用来为每个元素提取比较值。默认为None(直接比较每个元素)

reverse=False表示升序排列。reverse=True表示降序排列。


eg:对由tuple组成的列表排序

list1=[('e',6),('d',5),('f',4)]

list2=[(1,'b',3),(3,'a',2),(6,'d',5)]


#(使用key)

list3=sorted(list1,key=lambda list1:list1[0])  #以第一个元素进行排序

list4=sorted(list2,key=lambda list2:list2[2])  #以最后一个元素进行排序

list3

>>>[('d', 5), ('e', 6), ('f', 4)]

list4

>>>[(3, 'a', 2), (1, 'b', 3), (6, 'd', 5)]


#(使用cmp)

list5=sorted(list1,cmp=lambda x,y:cmp(x[0],y[0]))

list5

>>>[('d', 5), ('e', 6), ('f', 4)]

理解此处 cmp(x[0],y[0]):每次取list1中两个元组的第一个元素,进行两两比较,然后按大小排序。如list1=[('e',6),('d',5),('f',4)]  第一次取'e'和'd'两两比较大小,再排序,再取下一个元组的第一个元素依次比较下去,直到整个列表中的每个元组的第一个元素都两两比较完则比较完毕。


使用opterator函数加快速度

import operator

list1=[('e',5),('d',8),('f',4)]

list6=sorted(list1,key=operator.itemgetter(0))

>>>[('d',8), ('e',5), ('f',4)]


使用opterator函数进行多级排序

import operator

list_sorted=sorted(list,key=operator.itemgetter(0,2))

#先根据第1个域排序,再根据第3个域排序。


eg:对包含字典的列表排序

list1=[{'name':'S','age':24},{'name':'G','age':26},{'name':'Z','age':25}]

list_sorted_1=sorted(list1,key=operator.itemgetter('name'))  #升序

list_sorted_2=sorted(list1,key=lambda list1:list1['age'],reverse=True) #降序

list_sorted_1

>>>[{'age': 26, 'name': 'G'}, {'age': 24, 'name': 'S'}, {'age': 25, 'name': 'Z'}]

list_sorted_2

>>>[{'age': 26, 'name': 'G'}, {'age': 25, 'name': 'Z'}, {'age': 24, 'name': 'S'}]

0 0