Python的内部容器,大概分为:tuple,set,list,dict,就排序来说,对列表和字典的排序需求较多,tuple主要作为不可变容器,set用来去重复,下面把list和dict常见排序方法总结一下:
一、列表
1、 list排序很简单,主要看list的元素组成,如果元素是由单值组成,比如下面的方法:
>>> a = [1,2,5,3,4] >>> a.sort() >>> print a [1, 2, 3, 4, 5]
list本身自带sort()方法,这种方法是在list本身进行操作,也就是说改变了a的原始结构
2、list元素是由元组组成的,要求按照元组的某一列进行排序,示例如下:
>>> a=[('c',1),('b',2),('a',3)] >>> b=sorted(a,key = lambda ss:ss[0]) >>> b [('a', 3), ('b', 2), ('c', 1)] >>> a [('c', 1), ('b', 2), ('a', 3)] >>>
采用Python的内建函数sorted(),这种很明显是把排序结果放到了b列表中,但是实际上并不会改变a数据的原始结构,如果我们依然采用列表的sort()方法呢?示例如下:
>>> a [('c', 1), ('b', 2), ('a', 3)] >>> a.sort(key = lambda x:x[0]) >>> a [('a', 3), ('b', 2), ('c', 1)] >>>
还有一个方法不过使用cmp参数:
>>> c=sorted(a,cmp = lambda x,y:cmp(x[1],y[1]),reverse = 0) >>> c [('c', 1), ('b', 2), ('a', 3)] >>>
cmp是比较,X[1],y[1]表示第一和第二个元素的第二列,reverse=0表示不进行反转,可以reverse=False,两者一样效果,当然reverse不写也可以,默认为False
3、使用operator模块
>>> a [('c', 1), ('b', 2), ('a', 3)] >>> b = sorted(a,key=itemgetter(0)) >>> b [('a', 3), ('b', 2), ('c', 1)]
二、字典排序
字典的话,主要是按照键或值来排序
>>> b [('a', 3), ('b', 2), ('c', 1)] >>> dic = {'a':3,'b':2,'c':1} >>> sorted(dic.iteritems(),key = lambda aa:aa[1],reverse=False) [('c', 1), ('b', 2), ('a', 3)] >>>
还有的方法是直接用for循环来做,但我觉得直接sorted()已经很清晰了。
总结:
一般做排序,list来说可以根据是否要改变原始数据结构来选择不同的方法,字典就用sorted即可,关于效率,其实我个人感觉用lambda的key方法较快。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 07:43:34