国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中List的sort方法指南

2020-02-23 05:45:06
字體:
供稿:網(wǎng)友

簡單記一下python中List的sort方法(或者sorted內(nèi)建函數(shù))的用法。 

List的元素可以是各種東西,字符串,字典,自己定義的類等。

sorted函數(shù)用法如下:

sorted(data, cmp=None, key=None, reverse=False) 

其中,data是待排序數(shù)據(jù),可以使List或者iterator, cmp和key都是函數(shù),這兩個(gè)函數(shù)作用與data的元素上產(chǎn)生一個(gè)結(jié)果,sorted方法根據(jù)這個(gè)結(jié)果來排序。

cmp(e1, e2) 是帶兩個(gè)參數(shù)的比較函數(shù), 返回值: 負(fù)數(shù): e1 < e2, 0: e1 == e2, 正數(shù): e1 > e2. 默認(rèn)為 None, 即用內(nèi)建的比較函數(shù).
key 是帶一個(gè)參數(shù)的函數(shù), 用來為每個(gè)元素提取比較值. 默認(rèn)為 None, 即直接比較每個(gè)元素.
通常, key 和 reverse 比 cmp 快很多, 因?yàn)閷γ總€(gè)元素它們只處理一次; 而 cmp 會處理多次.

通過例子來說明sorted的用法:

1. 對由tuple組成的List排序

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] 

用key函數(shù)排序(lambda的用法見 注釋1)

>>> sorted(students, key=lambda student : student[2])  # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

用cmp函數(shù)排序

>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

用 operator 函數(shù)來加快速度, 上面排序等價(jià)于:(itemgetter的用法見 注釋2)

>>> from operator import itemgetter, attrgetter >>> sorted(students, key=itemgetter(2)) 

用 operator 函數(shù)進(jìn)行多級排序

>>> sorted(students, key=itemgetter(1,2)) # sort by grade then by age [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] 

2. 對由字典排序

>>> d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True) [('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)] 

注釋1
參考:http://jasonwu.me/2011/10/29/introduce-to-python-lambda.html

注釋2
參考:http://ar.newsmth.net/thread-90745710c90cf1.html

class itemgetter(__builtin__.object) | itemgetter(item, ...) --> itemgetter object | | Return a callable object that fetches the given item(s) from its operand. | After, f=itemgetter(2), the call f(r) returns r[2]. | After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3]) 

相當(dāng)于

def itemgetter(i,*a):    def func(obj):      r = obj[i]      if a:        r = (r,) + tuple(obj[i] for i in a)      return r    return func   >>> a = [1,2,3]  >>> b=operator.itemgetter(1)  >>> b(a)  2  >>> b=operator.itemgetter(1,0)  >>> b(a)  (2, 1)  >>> b=itemgetter(1)  >>> b(a)  2  >>> b=itemgetter(1,0)  >>> b(a)  (2, 1)              
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑河市| 保山市| 曲沃县| 杭锦旗| 淮北市| 乡城县| 肥东县| 岐山县| 浏阳市| 探索| 辽中县| 南雄市| 始兴县| 佛山市| 儋州市| 曲水县| 丰都县| 闽侯县| 涞源县| 英吉沙县| 百色市| 茌平县| 乌鲁木齐市| 平利县| 民和| 通化市| 阿城市| 闸北区| 华蓥市| 军事| 辽阳县| 石景山区| 盘山县| 焉耆| 惠州市| 扬中市| 民县| 昌都县| 邢台市| 射阳县| 聊城市|