Python技術(shù)文章:深入理解collections模塊

24.png

collections模塊是Python的內(nèi)建模塊之一,它實(shí)現(xiàn)了特殊的容器數(shù)據(jù)類型乎芳,提供了Python內(nèi)建的數(shù)據(jù)類型dict遵蚜、list、set奈惑、和tuple的高效替代選擇吭净。

一、namedtuple

namedtuple() 函數(shù)是一個(gè)工廠函數(shù)肴甸,它返回一個(gè)子類寂殉,這個(gè)子類繼承自 tuple 類,并且擁有名字原在,這個(gè)名字就是你傳給 namedtuple() 的第一個(gè)參數(shù)友扰。這個(gè)子類的實(shí)例就像一個(gè)普通的元組,但是還提供了方便的屬性訪問庶柿。namedtuple是一種定義小型和不可變的數(shù)據(jù)類的簡單方法焕檬。

from collections import namedtuple

# 創(chuàng)建一個(gè)namedtuple類型User,并包含name和age兩個(gè)屬性澳泵。
User = namedtuple('User', ['name', 'age'])

# 創(chuàng)建一個(gè)User對(duì)象
user = User(name='user1', age=23)

print(user.name)  # 輸出:user1
print(user.age)   # 輸出:23

二实愚、deque

deque(雙向隊(duì)列)是一種來自 collections 模塊的容器,它提供了從左端和右端高效、快速地添加和刪除元素的功能腊敲。

from collections import deque

# 創(chuàng)建一個(gè)deque
d = deque(['a', 'b', 'c'])

# 從右端添加元素
d.append('d')     # d現(xiàn)在是deque(['a', 'b', 'c', 'd'])

# 從左端添加元素
d.appendleft('e')  # d現(xiàn)在是deque(['e', 'a', 'b', 'c', 'd'])

# 從右端刪除元素
d.pop()           # 返回 'd', d現(xiàn)在是deque(['e', 'a', 'b', 'c'])

# 從左端刪除元素
d.popleft()        # 返回 'e', d現(xiàn)在是deque(['a', 'b', 'c'])

三击喂、Counter

collections模塊的Counter類是一個(gè)簡單的計(jì)數(shù)器,例如碰辅,它可以用來統(tǒng)計(jì)字符的個(gè)數(shù):

from collections import Counter

c = Counter('hello world')  # 從一個(gè)可迭代對(duì)象創(chuàng)建
print(c)  # 輸出 Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

Counter對(duì)象有一個(gè)有用的方法most_common(n)懂昂,該方法返回計(jì)數(shù)最多的n個(gè)元素的列表,每個(gè)元素是一個(gè)元組没宾,元組的第一個(gè)元素是元素本身凌彬,第二個(gè)元素是元素的計(jì)數(shù)。

四循衰、defaultdict

defaultdict是dict的一個(gè)子類铲敛,它接受一個(gè)工廠函數(shù)作為默認(rèn)值,當(dāng)查找的鍵不存在時(shí)会钝,可以實(shí)例化一個(gè)值作為默認(rèn)值伐蒋。

from collections import defaultdict

# 使用列表(list)作為default_factory,當(dāng)鍵不存在時(shí)迁酸,返回一個(gè)空列表先鱼。
dd = defaultdict(list)

# 添加一個(gè)鍵值對(duì)
dd['dogs'].append('Rufus')
dd['dogs'].append('Kathrin')
dd['dogs'].append('Mr Sniffles')

print(dd['dogs'])  # 輸出: ['Rufus', 'Kathrin', 'Mr Sniffles']

五、OrderedDict

OrderedDict是dict的一個(gè)子類奸鬓,它記住了元素插入的順序焙畔。在Python 3.7之前,普通的dict并不保證鍵值對(duì)的順序串远,而OrderedDict則按照插入的順序排列元素宏多。從Python 3.7開始,dict也會(huì)保持插入順序抑淫,但是OrderedDict仍然有它的特性,如重新排列字典的順序等姥闪。

from collections import OrderedDict

d = OrderedDict()

d['first'] = 1
d['second'] = 2
d['third'] = 3
d['last'] = 4

# 輸出 "first 1", "second 2", "third 3", "last 4"
for key in d:
    print(key, d[key])

六始苇、結(jié)論

collections模塊中還包含有其他有用的工具,如ChainMap筐喳、UserDict催式、UserList等等,這些都是非常實(shí)用的集合類避归。使用和理解這些數(shù)據(jù)結(jié)構(gòu)可以讓我們?cè)诰幊讨懈拥眯膽?yīng)手荣月,代碼更加高效和清晰。

上述這些是 collections 模塊中最常用的一些數(shù)據(jù)結(jié)構(gòu)梳毙,理解和熟練使用這些工具哺窄,可以極大提高我們編程的效率。希望這篇文章能幫助你深入理解Python中的collections模塊,能夠更好的使用Python進(jìn)行編程萌业。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坷襟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子生年,更是在濱河造成了極大的恐慌婴程,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抱婉,死亡現(xiàn)場離奇詭異档叔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蒸绩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門衙四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侵贵,你說我怎么就攤上這事届搁。” “怎么了窍育?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵卡睦,是天一觀的道長。 經(jīng)常有香客問我漱抓,道長表锻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任乞娄,我火速辦了婚禮瞬逊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仪或。我一直安慰自己确镊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布范删。 她就那樣靜靜地躺著蕾域,像睡著了一般。 火紅的嫁衣襯著肌膚如雪到旦。 梳的紋絲不亂的頭發(fā)上旨巷,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音添忘,去河邊找鬼采呐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛搁骑,可吹牛的內(nèi)容都是我干的斧吐。 我是一名探鬼主播又固,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼会通!你這毒婦竟也來了口予?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤涕侈,失蹤者是張志新(化名)和其女友劉穎沪停,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裳涛,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡木张,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了端三。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舷礼。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖郊闯,靈堂內(nèi)的尸體忽然破棺而出妻献,到底是詐尸還是另有隱情,我是刑警寧澤团赁,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布育拨,位于F島的核電站,受9級(jí)特大地震影響欢摄,放射性物質(zhì)發(fā)生泄漏熬丧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一怀挠、第九天 我趴在偏房一處隱蔽的房頂上張望析蝴。 院中可真熱鬧,春花似錦绿淋、人聲如沸闷畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佑菩。三九已至,卻和暖如春冯吓,著一層夾襖步出監(jiān)牢的瞬間倘待,已是汗流浹背疮跑。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工组贺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祖娘。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓失尖,卻偏偏與公主長得像啊奄,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掀潮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容