Python之operator.itemgetter函式和sorted函式
operator.itemgetter函式
operator模組提供的itemgetter函式用於獲取物件不同維的資料(理解看下面的例子),引數為需要獲取的 資料在物件中的序號:
from operator import itemgetter
#從operator模組匯入itemgetter函式
>>> a=[1,2,3]
>>> b=itemgetter(1)
>>> b=(a)
2
>>> b=itemgetter(0,1)
>>> b(a)
(1,2)
要注意,operaot.itemgetter函式獲取的不是值,而是定義了一個函式,通過該函式作用到物件上才能獲取值。
sorted函式
Python內建的排序函式sorted可以對list獲知iterator進行排序。
該函式原型為:sorted(iterable[, cmp[, key[, reverse]]])
引數解釋:
literable為指定要排序的可迭代物件
cmp為函式,指定排序時進行比較的函式,可以指定一個函式或者lambda函式
例:
students為一個list,每個成員有三個域,用sorted函式進行比較時可以自己定按照什麼進行排序,也就是設定cmp函式。這裡要按照第三個域來排序:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda student : student[2])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
- key為函式,指定取待排序元素的哪一項進行排序,舉例如下:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda student : student[2])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
key指定的lambda函式功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進行排序。
有了上面的operator.itemgetter
函式,也可以用該函式來實現,例如要通過student的第三個域排序,可以這麼寫:
sorted(students, key=operator.itemgetter(2))
sorted函式也可以進行多級排序,例如要根據第二個域和第三個域進行排序,可以這麼寫:
sorted(students, key=operator.itemgetter(1,2))
綜合示例
假設我們用一組tuple表示學生名字和成績:
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
用sorted
對上述列表按名字排序,再按成績從低到高排序,以及按照成績從高到低排序:
from operator import itemgetter
students = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print(sorted(students, key=itemgetter(0)))
print(sorted(students, key=lambda t: t[1]))
print(sorted(students, key=itemgetter(1), reverse=True))
相關文章
- python---之sorted函式Python函式
- python內建函式——sortedPython函式
- 12.4、python內建函式—sortedPython函式
- python sorted()函式的引數用法Python函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- Python之函式5.1Python函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- Python合集之Python函式Python函式
- Python基礎之特殊的函式--裝飾器和偏函式Python函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【Spark篇】---SparkSql之UDF函式和UDAF函式SparkSQL函式
- 【Python】python map()函式和lambda表示式Python函式
- Python學習之函式Python函式
- python基礎之函式Python函式
- python之正則函式Python函式
- Python函式與lambda 表示式(匿名函式)Python函式
- 【Python基礎】Python 函式返回多個值和函式註解Python函式
- Python 函式Python函式
- Python函式Python函式
- PHP函式之parse_str()和parse_url()函式PHP函式
- 07:函式之函式的引數和返回值函式
- Python學習之zip函式Python函式
- 五、Python函式之基礎Python函式
- Python之函式裝飾器Python函式
- 06 python開發之函式Python函式
- Python 函式進階-遞迴函式Python函式遞迴
- python函式每日一講 - int()函式Python函式
- Python 函式進階-高階函式Python函式
- 常見函式之單行函式函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- Python函式屬性和PyCodeObjectPython函式Object
- 03-python函式和列表Python函式
- Python的字典、集合和函式Python函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- 函式防抖和函式節流函式