1. 程式人生 > 其它 >從機器學習學python(二) ——iteritems、itemgetter、sorted、sort

從機器學習學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