Python中的sorted函數(shù)和operator.itemgetter可以說經(jīng)常一起用藐翎,主要是處理一些復(fù)雜的排序問題的時(shí)候漂问。
operator.itemgetter函數(shù)
operator模塊提供的itemgetter函數(shù)主要用于獲取傳入對(duì)象的特定索引的值,例如:
a = [1,2,3]
b = operator.itemgetter(1) //定義函數(shù)b刻帚,獲取對(duì)象的第1個(gè)值
b(a)
輸出 2
b=operator.itemgetter(1,0) //定義函數(shù)b拜效,獲取對(duì)象的第1個(gè)和第0個(gè)值
b(a)
輸出 (2, 1)
Tips:operator.itemgetter函數(shù)獲取的不是值,而是定義了一個(gè)函數(shù)浓恶,通過該函數(shù)作用到對(duì)象上才能獲取值。
sorted函數(shù)
Python內(nèi)置的排序函數(shù)sorted可以對(duì)iterator進(jìn)行排序结笨,可參加官網(wǎng)文檔包晰,該函數(shù)原型為:
sorted(iterable[, cmp[, key[, reverse]]])
參數(shù)解釋:
- iterable:指要排序的 list 或者 iterable;
- cmp:是指定排序時(shí)進(jìn)行比較的函數(shù)炕吸,可以指定一個(gè)函數(shù)或者lambda函數(shù)伐憾。
- key:指定取待排序元素的哪一項(xiàng)進(jìn)行排序。
舉例來(lái)說赫模,students 是一個(gè) list树肃,用sorted進(jìn)行比較時(shí)可以自己定cmp函數(shù),例如這里要通過比較每個(gè)元素的第三個(gè)值來(lái)排序瀑罗,代碼可以這樣寫:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
有了上面的 operator.itemgetter 函數(shù)胸嘴,也可以用該函數(shù)來(lái)實(shí)現(xiàn)。例如要通過student 的第三個(gè)域排序斩祭,可以這么寫:
sorted(students, key=operator.itemgetter(2))
sorted 函數(shù)也可以進(jìn)行多級(jí)排序筛谚,例如要根據(jù)第二個(gè)域和第三個(gè)域進(jìn)行排序,可以這么寫:
sorted(students, key=operator.itemgetter(1,2))
即先跟句第二個(gè)域排序停忿,再根據(jù)第三個(gè)域排序。
- reverse參數(shù)是一個(gè)bool變量蚊伞,表示升序還是降序排列席赂,默認(rèn)為False(升序排列),定義為True時(shí)將按降序排列时迫。
sorted函數(shù)更多的例子可以參考官網(wǎng)文檔:https://wiki.python.org/moin/HowTo/Sorting/颅停。