Python中的operator.itemgetter函數


Python中的operator.itemgetter函數

一、總結

一句話總結:

【itemgetter函數用於獲取對象的哪些維的數據】:operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號)
實例:a = [1,2,3] b=operator.itemgetter(2,1) print(b(a)) #結果3,2
【itemgetter函數是定義了一個函數】:要注意,operator.itemgetter函數獲取的不是值,而是定義了一個函數,通過該函數作用到對象上才能獲取值。

 

1、operator.itemgetter函數在sort函數中的應用?

【key=lambda student : student[2]】:students = [('john', 'C', 15), ('jane', 'B', 17), ('dave', 'B', 10)]  ans=sorted(students, key=lambda student : student[2])
【key=operator.itemgetter(2)】:operator.itemgetter函數,通過student的第三個域排序:ans2=sorted(students, key=operator.itemgetter(2))
【key=operator.itemgetter(1,2)】:operator.itemgetter函數多級排序:ans3=sorted(students, key=operator.itemgetter(1,2))

 

 

二、Python中的operator.itemgetter函數

轉自或參考:Python中的sorted函數以及operator.itemgetter函數
https://blog.csdn.net/dongtingzhizi/article/details/12068205

1、operator.itemgetter函數

operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號),下面看例子。

In [1]:
import operator a = [1,2,3] b=operator.itemgetter(1) #定義函數b,獲取對象的第1個域的值 print(b(a)) 
2
In [2]:
b=operator.itemgetter(1,0) #定義函數b,獲取對象的第1個域和第0個的值 print(b(a)) 
(2, 1)
In [9]:
b=operator.itemgetter(2,1) #定義函數b,獲取對象的第2個域和第1個的值 print(b(a)) 
(3, 2)

要注意,operator.itemgetter函數獲取的不是值,而是定義了一個函數,通過該函數作用到對象上才能獲取值。

2、operator.itemgetter函數在sort函數中的應用

Python內置的排序函數sorted可以對list或者iterator進行排序,官網文檔見:http://docs.python.org/2/library/functions.html?highlight=sorted#sorted,該函數原型為:

sorted(iterable[, cmp[, key[, reverse]]])

參數解釋:

(1)iterable指定要排序的list或者iterable,不用多說;

(2)cmp為函數,指定排序時進行比較的函數,可以指定一個函數或者lambda函數,如: students為類對象的list,沒個成員有三個域,用sorted進行比較時可以自己定cmp函數,

例如這里要通過比較第三個數據成員來排序,代碼可以這樣寫:students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] sorted(students, key=lambda student : student[2])

(3)key為函數,指定取待排序元素的哪一項進行排序,函數用上面的例子來說明,代碼如下: sorted(students, key=lambda student : student[2])

key指定的lambda函數功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進行排序。

有了上面的operator.itemgetter函數,也可以用該函數來實現,例如要通過student的第三個域排序,可以這么寫:sorted(students, key=operator.itemgetter(2))

sorted函數也可以進行多級排序,例如要根據第二個域和第三個域進行排序,可以這么寫:sorted(students, key=operator.itemgetter(1,2)) 即先跟句第二個域排序,再根據第三個域排序。

(4)reverse參數就不用多說了,是一個bool變量,表示升序還是降序排列,默認為false(升序排列),定義為True時將按降序排列。

sorted函數更多的例子可以參考官網文檔:https://wiki.python.org/moin/HowTo/Sorting/。

key為函數,指定取待排序元素的哪一項進行排序,例如要通過比較第三個數據成員來排序

In [5]:
students = [('john', 'C', 15), ('jane', 'B', 17), ('dave', 'B', 10)] ans=sorted(students, key=lambda student : student[2]) print(students) print(ans) 
[('john', 'C', 15), ('jane', 'B', 17), ('dave', 'B', 10)]
[('dave', 'B', 10), ('john', 'C', 15), ('jane', 'B', 17)]

有了上面的operator.itemgetter函數,也可以用該函數來實現,例如要通過student的第三個域排序,可以這么寫:

In [7]:
ans2=sorted(students, key=operator.itemgetter(2)) print(students) print(ans2) 
[('john', 'C', 15), ('jane', 'B', 17), ('dave', 'B', 10)]
[('dave', 'B', 10), ('john', 'C', 15), ('jane', 'B', 17)]

sorted函數也可以進行多級排序,例如要根據第二個域和第三個域進行排序,可以這么寫:

In [8]:
ans3=sorted(students, key=operator.itemgetter(1,2)) print(students) print(ans3) 
[('john', 'C', 15), ('jane', 'B', 17), ('dave', 'B', 10)]
[('dave', 'B', 10), ('jane', 'B', 17), ('john', 'C', 15)]
In [ ]:
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM