Python最被低估的庫,用好了效率提公升10倍!

2021-09-29 08:14:52 字數 2551 閱讀 7727

python有許多很好的庫(libraries),實現這些功能只需要幾行**。今天介紹乙個庫:collections. 這個模組提供容器相關的更高效能的資料型別,它們提供比通用容器 dict, list, set 和tuple更強大的功能。

今天介紹其中三種資料型別,最後你可能會驚訝它們怎麼這麼好用。

對於資料分析或機器學習領域,用好namedtuples 會寫出可讀性強、易於維護的**。大家回憶這種熟悉的場景,你正在做特徵工程,因為你尤其喜愛list, 所以把一堆特徵放到乙個list 中,然後喂到機器學習模型中。很快,你將會意識到數百個特徵位於此list 中,這就是事情變得糟糕的開始。

in [10]: feature = ['age','height','name']

in [11]: data = [[10,1,'xiaoming'],[12,1,5,'xiaohong']]

in [12]: data[0][0] #只能靠整數索引到某個特徵,0對應age

out[12]: 10

某天,你想使用某個特徵,這時比較棘手,你不知道它的index!更糟糕的是,當你準備離職要交接工作時,他們看到乙個乙個的數字型索引,完全對不上哪個和哪個,他們懵逼,你也尷尬。

如果我們使用namedtuples去處理以上資料,亂為一團的事情將會迅速變得井然有序:

in [4]: person = namedtuple('person',['age','height','name'])

in [15]: data2 = [person(10,1.4,'xiaoming'),person(12,1.5,'xiaohong')]

in [16]: data2[0].age

out[16]: 10

僅僅幾行**,我們將會很容易索引到第0行資料的age屬性取值,這在實際中真是太好用。你告別indexes訪問你的資料集中的特徵值,而是使用更加人性化,可讀性強的names索引。

namedtuples會使得**易讀、更易維護。

counter正如名字那樣,它的主要功能就是計數。這聽起來簡單,但是我們在分析資料時,基本都會涉及計數,真的家常便飯。

習慣使用list 的看過來,有一些數值已經放在乙個list中:

skupurchasecount = [3, 8, 3, 10, 3, 3, 1, 3, 7, 6, 1, 2, 7, 0, 7, 9, 1, 5, 1, 0]

in [33]: for i in skupurchasecount:

...:     if countdict.get(i) is none:

...:         countdict[i]=1

...:     else:

...:         countdict[i]+=1

in [34]: countdict

out[34]:

如果使用counter,我們可以寫出更簡化的**:

in [35]: from collections import counter

in [42]: counter(skupurchasecount).most_common()

out[42]:

[(3, 5),(1, 4),(7, 3),(0, 2),(8, 1),(10, 1),(6, 1),(2, 1),(9, 1),(5, 1)]

僅僅一行**,我們便輸出統計計數結果,並且是乙個按照次數統計出來的由大到小排序好的tuples列表,因此我們很快就會看到,購買3次是出現最多的,一共5次。

購買為1次的占多數,屬於長尾。

defaultdict是乙個被初始化的字典,也就是每個鍵都已經被訪問一次:

in [53]: d = defaultdict(int)

in [54]: for k in 'collections':

...:     d[k] += 1

in [55]: d

out[55]:

defaultdict(int,

)

一般地,當你嘗試訪問乙個不在字典中的值時,將會丟擲乙個異常。但是defaultdict可以幫助我們初始化,它的引數作為default_factory. 在上面例子中,將生成int物件,意思是預設值為int 型,並設定初始值為0,所以我們可以很容易地統計每個字元出現的次數。

****** and clean!

更有用的乙個使用場景,我們有很多種商品,在每秒內下單次數的統計資料如下:

in [56]: data = [('iphone11',103), ('華為macbook-sku1232',210),('iphone11',21),('

...: 華為macbook-sku1232',100)]

in [57]: d = defaultdict(list)

in [58]: for ele in data:

in [59]: d

out[59]: defaultdict(list, )

結合這個提示再理解上面**,就不會吃力。

你的價值被低估了嗎

工作中最鬱悶的事情之一就是,你覺得自己才高八斗,學富五車,完全是治國領軍的奇才,但在別人的心中,你也許有那麼點特色,比如文筆還不錯,人挺老實,名牌大學畢業等等微不足道的特色,但與你的自我評估絕對是天壤之別。不知道你發現了沒有,人們好像總是過於苛刻地看待別人的優點,又總是過於慷慨地對待自己的缺點,所謂...

資料採集那些被低估的價值

說到網頁資料採集器,很多企業不由自主的想到了抄內容,抓賬號之類的似乎上不了檯面的一些用途,網頁資料採集的應用大家習以為常的是站長抓取內容進行偽原創,或者抓取賬號進行網路營銷推送之內的,透露著或多或少竊取的意味在裡面。其實,資料採集技術發展應用至今,很多企業的觀念仍舊停留在最原始的印象上,舊有的觀念對...

隨想錄(被低估的gcc g )

1 c 編譯c檔案 2 o 生成目標檔案 3 s 將c檔案生成彙編檔案 4 include 包含特定標頭檔案 5 i 大寫的i 指明頭檔案目錄 6 l 小寫的l 指明具體的動態庫名稱 7 l 指明動態庫目錄 8 d 新增預設macro定義 9 static 強制生成乙個exe檔案,不依賴動態庫,除錯...