python容器数据类型_python collections 容器数据类型
這個(gè)模塊實(shí)現(xiàn)了特定目標(biāo)的容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器 dict , list , set , 和 tuple 的替代選擇。
創(chuàng)建命名元組子類的工廠函數(shù)
類似列表(list)的容器,實(shí)現(xiàn)了在兩端快速添加(append)和彈出(pop)
類似字典(dict)的容器類,將多個(gè)映射集合到一個(gè)視圖里面
字典的子類,提供了可哈希對(duì)象的計(jì)數(shù)功能
字典的子類,保存了他們被添加的順序
字典的子類,提供了一個(gè)工廠函數(shù),為字典查詢提供一個(gè)默認(rèn)值
封裝了字典對(duì)象,簡化了字典子類化
封裝了列表對(duì)象,簡化了列表子類化
封裝了列表對(duì)象,簡化了字符串子類化
下面就常用的幾種方法舉例說明
1 import collections, re
2 #courter能夠統(tǒng)計(jì)可迭代對(duì)象中元素出現(xiàn)的次數(shù),對(duì)于文件可以統(tǒng)計(jì)字符、單詞出現(xiàn)的top n的頻率;返回結(jié)果類型為class collections對(duì)象
3 # .Counter;most_common方法返回值為一個(gè)列表,列表的元素為元組,元組內(nèi)為迭代對(duì)象和其出現(xiàn)的次數(shù),在需要排序時(shí)使用
4 list1 = [1, 2, 3, 1, 2, 3, "wo", "jiu", "shi", "wo"]
5 str1 = "wojiushiwo,buyiyangdewo"
6 list_counter = collections.Counter(list1)
7 list_counter_most_common = collections.Counter(list1).most_common()
8 str_counter = collections.Counter(str1)
9 print(list_counter, type(list_counter))
10 print(list_counter_most_common, type(list_counter_most_common))
11 print(str_counter, type(str_counter))
12
13 #統(tǒng)計(jì)文件中top n字符出現(xiàn)的頻率,使用此方法操作文件必須使用只讀模式,否則會(huì)報(bào)IO對(duì)象不能迭代錯(cuò)誤
14 data1 = open("test_file", encoding="utf-8").read()
15 file_char_counter = collections.Counter(data1)
16 print(file_char_counter, type(file_char_counter))
17 #統(tǒng)計(jì)文件中top n單詞出現(xiàn)的頻率
18 data2 = re.findall(r"\w+", open("test_file", encoding="utf-8").read())
19 file_word_counter = collections.Counter(data2)
20 print(file_word_counter, type(file_word_counter))
21
22 #Counter對(duì)象可以轉(zhuǎn)換為字典 列表 集合數(shù)據(jù)類型;列表內(nèi)容為源Counter的key;字典內(nèi)容為原來Counter類型的K:V,集合內(nèi)容類比List內(nèi)容
23 print(list(list_counter), dict(list_counter), set(list_counter))
24
25 #返回一個(gè)迭代器,其中每個(gè)元素將重復(fù)出現(xiàn)計(jì)數(shù)值所指定次。 元素會(huì)按首次出現(xiàn)的順序返回。 如果一個(gè)元素的計(jì)數(shù)值小于一,elements() 將會(huì)忽略它;注意此處字符串不要加引號(hào),否則會(huì)報(bào)錯(cuò)
26 element_test = collections.Counter(wo=3, jiu=2, shi=4)
27 print(element_test.elements())
28 for iters in element_test.elements():
29 print(iters)
30
31 #counter對(duì)象也支持?jǐn)?shù)學(xué)運(yùn)算
32 c = collections.Counter(a=3, b=1)
33 d = collections.Counter(a=1, b=2)
34 c + d # add two counters together: c[x] + d[x]
35 c - d # subtract (keeping only positive counts)
36 c & d # intersection: min(c[x], d[x])
37 c | d # union: max(c[x], d[x])
38 #單目加和減(一元操作符)意思是從空計(jì)數(shù)器加或者減去
39 c = collections.Counter(a=2, b=-4)
40 print(+c) #Counter({'a': 2})
41 print(-c) #Counter({'b': 4})
42
43 #deque對(duì)象; collections.deque([iterable[, maxlen]]) 返回一個(gè)新的雙向隊(duì)列對(duì)象,從左到右初始化(用方法 append()) ,
44 # 從 iterable (迭代對(duì)象) 數(shù)據(jù)創(chuàng)建。如果 iterable 沒有指定,新隊(duì)列為空。
45 #maxlen可以指定也可以不指定;不指定時(shí)deque可以無限長;
46 deque1 = collections.deque(list1, 3)
47 print(deque1, type(deque1)) #deque(['jiu', 'shi', 'wo'], maxlen=3)
48 deque1.append("test") #指定長度以后,當(dāng)deque長度到達(dá)上限后繼續(xù)append元素會(huì)將首元素?cái)D出去,
49 print(deque1, type(deque1)) #deque(['jiu', 'shi', 'wo'], maxlen=3)
50 """
51 deque常用方法
52 append(x)
53 添加 x 到右端。
54 appendleft(x)
55 添加 x 到左端。
56 clear()
57 移除所有元素,使其長度為0.
58 copy()
59 創(chuàng)建一份淺拷貝。
60 count(x)
61 計(jì)算 deque 中元素等于 x 的個(gè)數(shù)。
62 extend(iterable)
63 擴(kuò)展deque的右側(cè),通過添加iterable參數(shù)中的元素。
64 extendleft(iterable)
65 擴(kuò)展deque的左側(cè),通過添加iterable參數(shù)中的元素。注意,左添加時(shí),在結(jié)果中iterable參數(shù)中的順序?qū)⒈环催^來添加。
66 index(x[, start[, stop]])
67 返回 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一個(gè)匹配項(xiàng),如果未找到則引發(fā) ValueError。
68 insert(i, x)
69 在位置 i 插入 x 。
70 如果插入會(huì)導(dǎo)致一個(gè)限長 deque 超出長度 maxlen 的話,就引發(fā)一個(gè) IndexError。
71 pop()
72 移去并且返回一個(gè)元素,deque 最右側(cè)的那一個(gè)。 如果沒有元素的話,就引發(fā)一個(gè) IndexError。
73 popleft()
74 移去并且返回一個(gè)元素,deque 最左側(cè)的那一個(gè)。 如果沒有元素的話,就引發(fā) IndexError。
75 remove(value)
76 移除找到的第一個(gè) value。 如果沒有的話就引發(fā) ValueError。
77 reverse()
78 將deque逆序排列。返回 None 。
79 rotate(n=1)
80 向右循環(huán)移動(dòng) n 步。 如果 n 是負(fù)數(shù),就向左循環(huán)。
81 如果deque不是空的,向右循環(huán)移動(dòng)一步就等價(jià)于 d.appendleft(d.pop()) , 向左循環(huán)一步就等價(jià)于 d.append(d.popleft()) 。
82 Deque對(duì)象同樣提供了一個(gè)只讀屬性:
83 maxlen
84 Deque的最大尺寸,如果沒有限定的話就是 None 。
85 """
86
87 """
88 class collections.defaultdict([default_factory[, ...]])
89 返回一個(gè)新的類似字典的對(duì)象。 defaultdict 是內(nèi)置 dict 類的子類。它重載了一個(gè)方法并添加了一個(gè)可寫的實(shí)例變量。其余的功能與 dict 類相同,此處不再重復(fù)說明。
90 本對(duì)象包含一個(gè)名為 default_factory 的屬性,構(gòu)造時(shí),第一個(gè)參數(shù)用于為該屬性提供初始值,默認(rèn)為 None。所有其他參數(shù)(包括關(guān)鍵字參數(shù))都相當(dāng)于傳遞給 dict 的構(gòu)造函數(shù)。
91 """
92 #使用 list 作為 default_factory,很輕松地將(鍵-值對(duì)組成的)序列轉(zhuǎn)換為(鍵-列表組成的)字典:
93 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', "wo"), ('red', 1)]
94 d = collections.defaultdict(list)
95 for k, v in s:
96 d[k].append(v)
97 print(d, type(d)) #defaultdict(, {'yellow': [1, 3], 'blue': [2, 'wo'], 'red': [1]})
98
99 #設(shè)置 default_factory 為 int,使 defaultdict 用于計(jì)數(shù);類似于Counter的用法
100 s = 'mississippi'
101 d = collections.defaultdict(int)
102 for k in s:
103 d[k] += 1
104 print(d, type(d))
105
106 #使用 set 作為 default_factory,很輕松地將(鍵-值對(duì)組成的)序列轉(zhuǎn)換為(鍵-集合組成的)字典:
107 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', "wo"), ('red', 1)]
108 d = collections.defaultdict(set)
109 for k, v in s:
110 d[k].add(v)
111 print(d, type(d)) #defaultdict(, {'yellow': {1, 3}, 'blue': {2, 'wo'}, 'red': {1}})
112
113 #具名元組
114 name_tuple = collections.namedtuple("name_tuple", ["age", "name", "sex"])
115 name_tuple_obj1 = name_tuple(23, "zsq", "man")
116 print(name_tuple_obj1, type(name_tuple_obj1)) #name_tuple(age=23, name='zsq', sex='man')
117 print(name_tuple_obj1.name) # zsq 創(chuàng)建nametuple時(shí)相當(dāng)于創(chuàng)建了其多個(gè)屬性,實(shí)例化是將實(shí)參傳入構(gòu)造函數(shù)
118 print(name_tuple_obj1[1]) #zsq 也可以像類似list/tuple使用下標(biāo)對(duì)其進(jìn)行取值
119
120 #使用序列初始化nametuplue;序列元素?cái)?shù)量必須要與nametuple定義時(shí)元素?cái)?shù)量一致
121 list2 = [23, "wo", "xx"]
122 name_tuple_obj2 = name_tuple._make(list2)
123 print(name_tuple_obj2)
124
125 #nametuple實(shí)例的_asdict方法
126 name_tuple_asdict1 = name_tuple_obj2._asdict()
127 print(name_tuple_asdict1) #返回一個(gè)有序字典 OrderedDict([('age', 23), ('name', 'wo'), ('sex', 'xx')])
128 print(name_tuple_asdict1["name"]) #此種數(shù)據(jù)類型可以將nametuple定義時(shí)的形參作為字典key進(jìn)行取值
標(biāo)簽:deque,name,tuple,python,counter,數(shù)據(jù)類型,collections,print
來源: https://www.cnblogs.com/flags-blog/p/12663690.html
總結(jié)
以上是生活随笔為你收集整理的python容器数据类型_python collections 容器数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合成孔径成像算法与实现_浅析太赫兹成像技
- 下一篇: 2层框架结构柱子间距_框架结构的特点有哪