日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python 內(nèi)置模塊之 collections 的使用

系統(tǒng) 1971 0

python 有很多的內(nèi)置模塊,collections是比較常用的一個(gè),collections實(shí)現(xiàn)了專門的容器數(shù)據(jù)類型,為python的內(nèi)置容器提供了替代方案。(這句話是我根據(jù)官方文檔理解翻譯的。原文:This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.)我理解為在python常用的數(shù)據(jù)類型基礎(chǔ)上,提供了更高級(jí)的數(shù)據(jù)類型用法
collections中常用的類型有以下幾種(除了我介紹的還有其他的用法,有興趣的可以去官方文檔看一下,地址:https://docs.python.org/3/library/collections.html):
(1) namedtuple(): 可以創(chuàng)建一個(gè)類對(duì)象
(2) deque: 雙端隊(duì)列,可以在兩端操作
(3) counter: dict 的子類,具有統(tǒng)計(jì)功能
(4) OrderedDict: 有序字典
(5) defaultdict: dict的擴(kuò)展子類,擁有dict的所有功能,還能在調(diào)用不存在的鍵時(shí)創(chuàng)建一個(gè)默認(rèn)值
其中最常用的是namedtuple() 和 defaultdict

一、namedtuple
1. namedtuple 繼承自tuple ,可以用來創(chuàng)建一個(gè)類對(duì)象
用法如下圖:
python 內(nèi)置模塊之 collections 的使用_第1張圖片
2. 為什么會(huì)用到這種方法來定義類,而不用常用的class 方法:
(1) 代碼簡(jiǎn)潔
(2) 節(jié)省空間,少了用class 定義類的很多變量  (3) python解釋器在解釋class 類的時(shí)候會(huì)創(chuàng)建很多變量,使用namedtuple會(huì)省很多的中間變量,節(jié)省內(nèi)存,提高效率,尤其是在數(shù)據(jù)分析的時(shí)候用處很大
3. namedtuple繼承了tuple,所以也有拆包的功能,在創(chuàng)建類傳參時(shí)可以使用,用法如下:
在這里插入圖片描述
在這里插入圖片描述
4. 除了從tuple繼承的方法外,namedtuple還提供了3個(gè)方法和1個(gè)屬性,為了避免沖突,使用下劃線開頭。
(1) _make(iterable): 創(chuàng)建新的實(shí)例方法,參數(shù)必須是可迭代的
python 內(nèi)置模塊之 collections 的使用_第2張圖片
這里的user_tuple直接使用前面的
(2) _asdict(): 返回一個(gè)OrderdDict
OrderdDict會(huì)在后面提到
(3) _replace(**kwargs): 會(huì)返回一個(gè)新的namedtuple 實(shí)例,并將指定字段的值替換,也就是修改字段值,但是不會(huì)修改原實(shí)例,會(huì)返回一個(gè)新實(shí)例。
python 內(nèi)置模塊之 collections 的使用_第3張圖片
(4) _fields: 返回所有字段,返回結(jié)果是tuple
python 內(nèi)置模塊之 collections 的使用_第4張圖片
二、deque 雙端隊(duì)列
1. 用法跟list 類似,比list 多了左側(cè)操作的方法
python 內(nèi)置模塊之 collections 的使用_第5張圖片
2. 相關(guān)操作
(1) appendleft()
python 內(nèi)置模塊之 collections 的使用_第6張圖片
(2) clear()
(3) conut()
(4) copy()
(5) extend()
extendleft()
python 內(nèi)置模塊之 collections 的使用_第7張圖片
(6) index()
(7) pop()
popleft()
(8) remove()
(9) reverse()
python 內(nèi)置模塊之 collections 的使用_第8張圖片
要注意,reversed是有返回值的,并不改變?cè)?
(10) rotate():將元素向左或右移動(dòng),參數(shù)為1右移,-1 左移,默認(rèn)為1
python 內(nèi)置模塊之 collections 的使用_第9張圖片
(11) maxlen: deque的最大尺寸,如果返回None,表示沒有限制
這些用法跟list是一樣的,我就不演示了。
三、defaultdict
沒用defaultdict之前,如果我們要統(tǒng)計(jì)一個(gè)列表中每個(gè)元素出現(xiàn)的次數(shù),會(huì)怎么做呢?
一般我們都會(huì)想到下面這種方法:
python 內(nèi)置模塊之 collections 的使用_第10張圖片
如果對(duì)字典的用法了解的更深入的話,會(huì)想到下面這種方法:
python 內(nèi)置模塊之 collections 的使用_第11張圖片
這種方法相比第一種而言,不僅代碼行數(shù)少,而且速度更快,更高效
在我們了解了defaultdict 之后,有一種更簡(jiǎn)單高效的用法:
python 內(nèi)置模塊之 collections 的使用_第12張圖片
python 內(nèi)置模塊之 collections 的使用_第13張圖片
這里參數(shù)還可以參數(shù)函數(shù),用法如下:
python 內(nèi)置模塊之 collections 的使用_第14張圖片
四、OrderedDict
python2 下,dict 無序的
OrderdDcit 有序
python3 下,都有序
這里的有序指的是添加順序
用法有以下幾種:
(1) 刪除,popitem() 移除并返回一個(gè)鍵值對(duì)(key, value),參數(shù)為last, 不傳參時(shí)刪除最后一個(gè),傳參 last = True刪除第一個(gè), last = False,刪除最后一個(gè),默認(rèn)為False
python 內(nèi)置模塊之 collections 的使用_第15張圖片
(2) move_to_end(key, last=True)
last 為 True 時(shí),元素移到末尾,為 False 時(shí),移到首位,默認(rèn)為True
當(dāng) key 不存在時(shí),會(huì)報(bào) KeyError錯(cuò)誤
python 內(nèi)置模塊之 collections 的使用_第16張圖片
五、Counter
Counter 是dict的子類,用于計(jì)數(shù)可哈希對(duì)象
可以理解為就是一個(gè)計(jì)數(shù)功能。
用法如下:
(1)
python 內(nèi)置模塊之 collections 的使用_第17張圖片
(2) 如果元素不存在,不會(huì)報(bào)KeyError的錯(cuò)誤,會(huì)返回一個(gè)0值
在這里插入圖片描述
(3) 如果你想把Counter中的對(duì)象移除,要用del 實(shí)現(xiàn)
如下,但是b中元素并不會(huì)受到影響
python 內(nèi)置模塊之 collections 的使用_第18張圖片
(4) elements
在元素上返回一個(gè)迭代器,重復(fù)次數(shù)跟計(jì)數(shù)相同,如果計(jì)數(shù)小于等于0會(huì)忽略,按任意順序返回
python 內(nèi)置模塊之 collections 的使用_第19張圖片
(5) most_common([n])
返回?cái)?shù)量最多的前n個(gè)元素的列表,如果沒有傳入n,會(huì)默認(rèn)返回所有元素
python 內(nèi)置模塊之 collections 的使用_第20張圖片
(6) substract
從一個(gè)Counter中減去另一個(gè)Counter
python 內(nèi)置模塊之 collections 的使用_第21張圖片
Counter和defaultdict都有統(tǒng)計(jì)計(jì)數(shù)的功能,但時(shí)兩者有什么區(qū)別,我還沒有了解透徹,有明白的大佬,歡迎補(bǔ)充。
以上筆記是我根據(jù)官方文檔和慕課網(wǎng)的一個(gè)視頻教程整理出來的,如果有興趣的也可以自己去慕課網(wǎng)上看一下。

因?yàn)橹皇菍W(xué)習(xí)了一下collections模塊,并沒有在實(shí)際工作中使用,如果有錯(cuò)誤的地方,還請(qǐng)指正,共同進(jìn)步,謝謝!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 江西省| 万载县| 济宁市| 鹰潭市| 隆回县| 广水市| 武陟县| 邓州市| 福鼎市| 博湖县| 广元市| 镇康县| 苍南县| 嘉义市| 荥阳市| 且末县| 左云县| 三亚市| 德江县| 陈巴尔虎旗| 宁明县| 女性| 凌海市| 大连市| 兖州市| 邵东县| 呼伦贝尔市| 綦江县| 会泽县| 曲水县| 饶平县| 闽侯县| 昌图县| 城步| 阿城市| 临泽县| 赤水市| 颍上县| 吉木萨尔县| 冕宁县| 太保市|