天天看點

原來 collections 這麼好用!!

【導語】:collections是實作了特定目标的容器,以提供Python标準内建容器 dict , list , set , 和 tuple 的替代選擇。為了讓大家更好的認識,本文詳細總結collections的相關知識,一起來學習吧!

collections子產品:實作了特定目标的容器,以提供Python标準内建容器 dict、list、set、tuple 的替代選擇。

Counter:字典的子類,提供了可哈希對象的計數功能。

defaultdict:字典的子類,提供了一個工廠函數,為字典查詢提供了預設值。

OrderedDict:字典的子類,保留了他們被添加的順序。

namedtuple:建立命名元組子類的工廠函數。

deque:類似清單容器,實作了在兩端快速添加(append)和彈出(pop)。

ChainMap:類似字典的容器類,将多個映射集合到一個視圖裡面。

Counter

Counter是一個dict子類,主要是用來對你通路的對象的頻率進行計數。

常用方法:

elements():傳回一個疊代器,每個元素重複計算的個數,如果一個元素的計數小于1,就會被忽略。

most_common([n]):傳回一個清單,提供n個通路頻率最高的元素和計數

subtract([iterable-or-mapping]):從疊代對象中減去元素,輸入輸出可以是0或者負數

update([iterable-or-mapping]):從疊代對象計數元素或者從另一個 映射對象 (或計數器) 添加。

defaultdict

傳回一個新的類似字典的對象。defaultdict 是内置 dict 類的子類。

class collections.defaultdict([default_factory[, ...]])

例子

defaultdict的一個典型用法是使用其中一種内置類型(如str、int、list或dict等)作為預設工廠,這些内置類型在沒有參數調用時傳回空類型。

使用 int 作為 default_factory

使用 list 作為 default_factory

使用 dict 作為 default_factory

使用 set 作為 default_factory

OrderedDict

Python字典中的鍵的順序是任意的,它們不受添加的順序的控制。

collections.OrderedDict 類提供了保留他們添加順序的字典對象。

如果在已經存在的 key 上添加新的值,将會保留原來的 key 的位置,然後覆寫 value 值。

namedtuple

三種定義命名元組的方法:第一個參數是命名元組的構造器(如下的:Person1,Person2,Person3)

執行個體化命名元組

deque

collections.deque 傳回一個新的雙向隊列對象,從左到右初始化(用方法 append()),從 iterable(疊代對象)資料建立。如果 iterable 沒有指定,新隊列為空。

collections.deque 隊列支援線程安全,對于從兩端添加(append)或者彈出(pop),複雜度O(1)。

雖然 list 對象也支援類似操作,但是這裡優化了定長操作(pop(0)、insert(0,v))的開銷。

如果 maxlen 沒有指定或者是 None ,deque 可以增長到任意長度。否則,deque 就限定到指定最大長度。一旦限定長度的 deque 滿了,當新項加入時,同樣數量的項就從另一端彈出。

支援的方法:

append(x):添加x到右端。

appendleft(x):添加x到左端。

clear():清除所有元素,長度變為0。

copy():建立一份淺拷貝。

count(x):計算隊列中個數等于x的元素。

extend(iterable):在隊列右側添加iterable中的元素。

extendleft(iterable):在隊列左側添加iterable中的元素,注:在左側添加時,iterable參數的順序将會反過來添加。

index(x[,start[,stop]]):傳回第 x 個元素(從 start 開始計算,在 stop 之前)。傳回第一個比對,如果沒找到的話,抛出 ValueError 。

insert(i,x):在位置 i 插入 x 。注:如果插入會導緻一個限長deque超出長度 maxlen 的話,就抛出一個 IndexError 。

pop():移除最右側的元素。

popleft():移除最左側的元素。

remove(value):移去找到的第一個 value。沒有抛出ValueError。

reverse():将deque逆序排列。傳回 None 。

maxlen:隊列的最大長度,沒有限定則為None。

ChainMap

問題背景是我們有多個字典或者映射,想把它們合并成為一個單獨的映射,有人說可以用update進行合并,這樣做的問題就是建立了一個資料結構以緻于當我們對原來的字典進行更改的時候不會同步。如果想建立一個同步的查詢方法,可以使用 ChainMap。

可以用來合并兩個或者更多個字典,當查詢的時候,從前往後依次查詢。簡單使用:

有一個注意點就是當對ChainMap進行修改的時候總是隻會對第一個字典進行修改,如果第一個字典不存在該鍵,會添加。

從原理上面講,ChainMap 實際上是把放入的字典存儲在一個隊列中,當進行字典的增加删除等操作隻會在第一個字典上進行,當進行查找的時候會依次查找,new_child() 方法實質上是在清單的第一個元素前放入一個字典,預設是{},而 parents 是去掉了清單開頭的元素。

猜您喜歡:

附下載下傳 | 《Python進階》中文版

附下載下傳 | 經典《Think Python》中文版

附下載下傳 | 《Pytorch模型訓練實用教程》

附下載下傳 | 最新2020李沐《動手學深度學習》

附下載下傳 | 《可解釋的機器學習》中文版

附下載下傳 |《TensorFlow 2.0 深度學習算法實戰》

附下載下傳 | 超100篇!CVPR 2020最全GAN論文梳理彙總!

附下載下傳 |《計算機視覺中的數學方法》分享

原來 collections 這麼好用!!