python容器数据类型_python collections 容器数据类型
這個模塊實現了特定目標的容器,以提供Python標準內建容器 dict , list , set , 和 tuple 的替代選擇。
創建命名元組子類的工廠函數
類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)
類似字典(dict)的容器類,將多個映射集合到一個視圖里面
字典的子類,提供了可哈希對象的計數功能
字典的子類,保存了他們被添加的順序
字典的子類,提供了一個工廠函數,為字典查詢提供一個默認值
封裝了字典對象,簡化了字典子類化
封裝了列表對象,簡化了列表子類化
封裝了列表對象,簡化了字符串子類化
下面就常用的幾種方法舉例說明
1 import collections, re
2 #courter能夠統計可迭代對象中元素出現的次數,對于文件可以統計字符、單詞出現的top n的頻率;返回結果類型為class collections對象
3 # .Counter;most_common方法返回值為一個列表,列表的元素為元組,元組內為迭代對象和其出現的次數,在需要排序時使用
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 #統計文件中top n字符出現的頻率,使用此方法操作文件必須使用只讀模式,否則會報IO對象不能迭代錯誤
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 #統計文件中top 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對象可以轉換為字典 列表 集合數據類型;列表內容為源Counter的key;字典內容為原來Counter類型的K:V,集合內容類比List內容
23 print(list(list_counter), dict(list_counter), set(list_counter))
24
25 #返回一個迭代器,其中每個元素將重復出現計數值所指定次。 元素會按首次出現的順序返回。 如果一個元素的計數值小于一,elements() 將會忽略它;注意此處字符串不要加引號,否則會報錯
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對象也支持數學運算
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 #單目加和減(一元操作符)意思是從空計數器加或者減去
39 c = collections.Counter(a=2, b=-4)
40 print(+c) #Counter({'a': 2})
41 print(-c) #Counter({'b': 4})
42
43 #deque對象; collections.deque([iterable[, maxlen]]) 返回一個新的雙向隊列對象,從左到右初始化(用方法 append()) ,
44 # 從 iterable (迭代對象) 數據創建。如果 iterable 沒有指定,新隊列為空。
45 #maxlen可以指定也可以不指定;不指定時deque可以無限長;
46 deque1 = collections.deque(list1, 3)
47 print(deque1, type(deque1)) #deque(['jiu', 'shi', 'wo'], maxlen=3)
48 deque1.append("test") #指定長度以后,當deque長度到達上限后繼續append元素會將首元素擠出去,
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 創建一份淺拷貝。
60 count(x)
61 計算 deque 中元素等于 x 的個數。
62 extend(iterable)
63 擴展deque的右側,通過添加iterable參數中的元素。
64 extendleft(iterable)
65 擴展deque的左側,通過添加iterable參數中的元素。注意,左添加時,在結果中iterable參數中的順序將被反過來添加。
66 index(x[, start[, stop]])
67 返回 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一個匹配項,如果未找到則引發 ValueError。
68 insert(i, x)
69 在位置 i 插入 x 。
70 如果插入會導致一個限長 deque 超出長度 maxlen 的話,就引發一個 IndexError。
71 pop()
72 移去并且返回一個元素,deque 最右側的那一個。 如果沒有元素的話,就引發一個 IndexError。
73 popleft()
74 移去并且返回一個元素,deque 最左側的那一個。 如果沒有元素的話,就引發 IndexError。
75 remove(value)
76 移除找到的第一個 value。 如果沒有的話就引發 ValueError。
77 reverse()
78 將deque逆序排列。返回 None 。
79 rotate(n=1)
80 向右循環移動 n 步。 如果 n 是負數,就向左循環。
81 如果deque不是空的,向右循環移動一步就等價于 d.appendleft(d.pop()) , 向左循環一步就等價于 d.append(d.popleft()) 。
82 Deque對象同樣提供了一個只讀屬性:
83 maxlen
84 Deque的最大尺寸,如果沒有限定的話就是 None 。
85 """
86
87 """
88 class collections.defaultdict([default_factory[, ...]])
89 返回一個新的類似字典的對象。 defaultdict 是內置 dict 類的子類。它重載了一個方法并添加了一個可寫的實例變量。其余的功能與 dict 類相同,此處不再重復說明。
90 本對象包含一個名為 default_factory 的屬性,構造時,第一個參數用于為該屬性提供初始值,默認為 None。所有其他參數(包括關鍵字參數)都相當于傳遞給 dict 的構造函數。
91 """
92 #使用 list 作為 default_factory,很輕松地將(鍵-值對組成的)序列轉換為(鍵-列表組成的)字典:
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 #設置 default_factory 為 int,使 defaultdict 用于計數;類似于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,很輕松地將(鍵-值對組成的)序列轉換為(鍵-集合組成的)字典:
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 創建nametuple時相當于創建了其多個屬性,實例化是將實參傳入構造函數
118 print(name_tuple_obj1[1]) #zsq 也可以像類似list/tuple使用下標對其進行取值
119
120 #使用序列初始化nametuplue;序列元素數量必須要與nametuple定義時元素數量一致
121 list2 = [23, "wo", "xx"]
122 name_tuple_obj2 = name_tuple._make(list2)
123 print(name_tuple_obj2)
124
125 #nametuple實例的_asdict方法
126 name_tuple_asdict1 = name_tuple_obj2._asdict()
127 print(name_tuple_asdict1) #返回一個有序字典 OrderedDict([('age', 23), ('name', 'wo'), ('sex', 'xx')])
128 print(name_tuple_asdict1["name"]) #此種數據類型可以將nametuple定義時的形參作為字典key進行取值
標簽:deque,name,tuple,python,counter,數據類型,collections,print
來源: https://www.cnblogs.com/flags-blog/p/12663690.html
總結
以上是生活随笔為你收集整理的python容器数据类型_python collections 容器数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合成孔径成像算法与实现_浅析太赫兹成像技
- 下一篇: 2层框架结构柱子间距_框架结构的特点有哪