Python內(nèi)置模塊collections是什么?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
網(wǎng)站建設(shè)、成都網(wǎng)站制作,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)建站已向成百上千家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
collections模塊
Python內(nèi)置模塊,在內(nèi)置數(shù)據(jù)類型(dict、list、set、tuple)的基礎(chǔ)上,collections模塊還提供了幾個(gè)額外的數(shù)據(jù)類型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1、namedtuple: 生成可以使用名字來(lái)訪問(wèn)元素內(nèi)容的tuple。
2、deque: 雙端隊(duì)列,可以快速的從頭或尾追加和刪除元素。
3、Counter: 計(jì)數(shù)器,主要用來(lái)計(jì)數(shù)。
4、OrderedDict: 有序字典。
5、defaultdict: 帶有默認(rèn)值的字典。
namedtuple:命名元組
我們知道元組是不可被修改的容器,如元組(10,2),單從這個(gè)元組的元素來(lái)看,我們不知道這個(gè)元組的元素到底表示的是什么。它可以表示一對(duì)普通數(shù)字,亦可以表示一個(gè)坐標(biāo)軸的兩個(gè)坐標(biāo),還可以表示10的2次冪等,為了解決這個(gè)問(wèn)題namedtuple應(yīng)運(yùn)而生。下面是基礎(chǔ)示例:
我們假設(shè)(10,2)是一個(gè)坐標(biāo):
from collections import namedtuple # 創(chuàng)建命名元組對(duì)象命名,并指定元組長(zhǎng)度 point = namedtuple("point",["x","y"]) # 創(chuàng)建命名元組 tuple_1 = point(10,2) # 以x,y的形式打印元素 print(tuple_1.x,tuple_1.y)
打印內(nèi)容如下
10 2
下面以計(jì)算長(zhǎng)方體體積為例:
from collections import namedtuple # 創(chuàng)建命名元組對(duì)象命名,并指定元組長(zhǎng)度 Cuboid = namedtuple("Cuboid",["len","width","height"]) # 創(chuàng)建命名元組 tuple_1 = Cuboid(10,8,6) # 對(duì)比兩種打印方式我們就可以看出 # 第一種明顯比第二種打印方式更容易理解 print(tuple_1.len * tuple_1.width * tuple_1.height) print(tuple_1[0] * tuple_1[1] * tuple_1[2])
打印內(nèi)容如下
480 480
由上面的示例可以知道有時(shí)候利用命名元組引用元素的時(shí)候,我們可以更容易理解元素所表示的是什么。這樣對(duì)代碼的理解會(huì)更好。
deque:雙端隊(duì)列
deque與列表類似都是線性存儲(chǔ),但是隊(duì)列只支持在隊(duì)列的頭部和尾部追加和刪除元素,屬于列表的特殊版。在插入元素和刪除元素的效率上比列表更快。因?yàn)榱斜聿粌H可以在頭部和尾部追加和刪除元素,還可以在任意位置追加和刪除元素。每當(dāng)列表刪除一個(gè)非頭部和尾部元素的時(shí)候,列表就要重新進(jìn)行排序以保證列表的線性存儲(chǔ)。如下圖所示:
由上圖我們知道元素30對(duì)應(yīng)的內(nèi)存地址是3,刪除元素30后,為保證列表的線性,元素40和元素50內(nèi)存地址都向前移了一位,元素40的內(nèi)存地址由原來(lái)的4變成3,元素50的內(nèi)存地址由原來(lái)的5變成4。如果把列表的第一個(gè)元素刪除了,后面的整個(gè)列表都會(huì)依次向前補(bǔ)齊位置。而雙端隊(duì)列不會(huì),無(wú)論是刪除隊(duì)列的頭還是尾隊(duì)列的整體不會(huì)進(jìn)行補(bǔ)位的操作。
from collections import deque deque_list = deque([1,2,3,4]) deque_list.appendleft("a") # 向頭部追加元素 deque_list.append("z") # 向尾部追加元素 print("追加后的數(shù)據(jù)是:",deque_list) deque_list.pop() # 刪除尾部元素 deque_list.popleft() # 刪除頭部元素 print("刪除后的數(shù)據(jù)是:",deque_list)
打印內(nèi)容如下
追加后的數(shù)據(jù)是: deque(['a', 1, 2, 3, 4, 'z']) 刪除后的數(shù)據(jù)是: deque([1, 2, 3, 4])
OrderedDict:有序字典,有序字典是按照鍵插入順序進(jìn)行排列的(Python3.X的字典是按著鍵插入順序進(jìn)行排序的,Python2.X的字典鍵是按照ASCII表的順序進(jìn)行排序。)
如下:Python2.7中進(jìn)行測(cè)試。
dict_1 = {} dict_1["z"] = 1 dict_1["c"] = 3 dict_1["a"] = 2 dict_od = OrderedDict() # 有序字典 dict_od["z"] = 1 dict_od["c"] = 3 dict_od["a"] = 2 print(dict_1) print(dict_od) # 打印有序字典
打印內(nèi)容如下
{'a': 2, 'c': 3, 'z': 1} OrderedDict([('z', 1), ('c', 3), ('a', 2)])
defaultdict:默認(rèn)字典,我感覺這個(gè)還是有些用的。
1、如果默認(rèn)字典的鍵不存在,不會(huì)報(bào)錯(cuò)。
2、在定義默認(rèn)字典時(shí)可以指定值的類型。
示例:將列表中大于3的元素保存到字典的“a”鍵中,將小于3的元素保存到字典的“b”鍵中。
如下:使用普通字典的方法。
list_1 = [1,2,3,4,5,6] dict_1 = {} for i in list_1: if i > 3: if "a" in dict_1: dict_1["a"].append(i) else: dict_1["a"] = [i] else: if "b" in dict_1: dict_1["b"].append(i) else: dict_1["b"] = [i] print(dict_1)
打印內(nèi)容如下
{'b': [1, 2, 3], 'a': [4, 5, 6]}
如下:使用默認(rèn)字典的方法。
from collections import defaultdict list_1 = [1,2,3,4,5,6] dict_d = defaultdict(list) # 定義默認(rèn)字典 for i in list_1: if i > 3: dict_d["a"].append(i) else: dict_d["b"].append(i) print(dict_d) # 打印內(nèi)容如下 defaultdict(<class 'list'>, {'b': [1, 2, 3], 'a': [4, 5, 6]})
對(duì)比兩個(gè)代碼段可以發(fā)現(xiàn)使用默認(rèn)字典的方式代碼更加簡(jiǎn)潔,結(jié)構(gòu)更加清晰明了。
Counter:統(tǒng)計(jì)可迭代對(duì)象中每個(gè)元素出現(xiàn)的次數(shù)。
from collections import Counter list_1 = ["a","b","a",1,2,3,1] print(Counter(list_1)) # 打印內(nèi)容如下 Counter({'a': 2, 1: 2, 'b': 1, 2: 1, 3: 1})
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
本文題目:Python內(nèi)置模塊collections是什么
新聞來(lái)源:http://muchs.cn/article18/gdopgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)、、標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)