從機器學習學python(二) ——iteritems、itemgetter、sorted、sort
從機器學習學python(二)——iteritems、itemgetter、sorted、sort
(原創內容,轉載請註明來源,謝謝)
一、iteritems
這個方法由python的dict型別可以呼叫,dict.iteritems()是一個生成器(迭代器)的概念,類比php的generator,其只會返回當前結果,並且將變數指向dict的下一個元素的指標,可以在while、for語句中,通過next方法不斷獲取其下一個元素。
這種區域性返回的方式,對於大陣列的區域性讀取而言,速度較快,佔用記憶體空間少。
類比:items
dict.items()返回的是一個完整的列表所有列表項。對於要頻繁取其中多個值的時候,這樣做在取值過程比較快。但是當元素很多時,會佔用較多的記憶體。
二、operator.itemgetter
這個是python的operator模組,其中提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號。
要注意,operator.itemgetter函式獲取的不是值,而是定義了一個函式,通過該函式作用到物件上才能獲取值。
示例如下:
a = [1,2,3] >>> b=operator.itemgetter(1) //定義函式b,獲取物件的第1個域的值 >>> b(a) 2 >>> b=operator.itemgetter(1,0) //定義函式b,獲取物件的第1個域和第0個的值 >>> b(a) (2, 1)
三、sorted與sort
對List、Dict進行排序,Python提供了兩個方法:sorted和sort。
1、sort
用List的成員函式sort進行排序,在本地進行排序,不返回副本。
L.sort(cmp=None,key=None, reverse=False) ,其中:cmp(x, y) -> -1, 0, 1,key可以用operator的itemgetter來進行操作,reverse表示結果是否反向排序。
例如:
(1)
L =[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}] def f(x): return len(x) sort(key=f) print L
輸出:
[{1: 9}, {1: 5,3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
(2)
L =[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f2(a,b):
return a[1]-b[1]
L.sort(cmp=f2)
print L
2、sorted
sorted(iterable,cmp=None, key=None, reverse=False),後面三個引數同sort,第一個引數要求傳入一個iterable型別的變數,即可以用next獲取到下一個值的引數(例如iteritems)。
例項如下:
>>>students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]
>>> sorted(students, key=lambda student : student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) #sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> from operator import itemgetter, attrgetter
>>> sorted(students, key=itemgetter(1,2)) # sort by grade then by age
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
——written by linhxx 2018.01.04