【COLLECTION模塊】
collection模塊是對Python的通用內置容器:字典
、列表、元組和集合的擴展,它包含一些專業的容器數據類型:
- Counter(計數器):dict子類,用於計算可哈希性對象的個數。
- OrderedDict(有序字典):dict 子類,記錄著數據成員添加的順序。
- defaultdict(默認字典):dict 子類,調用一個工廠函數來為dict的values值缺失提供一個默認值。
- namedtuple(可命名元組):工廠函數生成有命名字段的tuple子類。
- deque(雙向隊列):能在“隊列”兩端快速出隊、入隊的函數,類似於隊列的(list-like)的容器。
- ChainMap:為多個映射創建單一視圖的類字典類型。
UserDict:
將字典包裹起來使得創建字典的子類更容易。UserList
:將列表對象包裹起來使得創建列表的子類更容易。UserString
:將字符串對象包裹起來使得創建字符串的子類更容易。
參考網頁:https://docs.python.org/3.5/library/collections.html
1.計數器(counter)
Counter
是dict
的子類,用於計數可哈希性對象。它是一個無序的容器,元素存儲為字典鍵,計數值存儲為字典值。計數允許任何整數值,包括零或負計數。Counter
類相似於bags或multisets等語言類。
它的元素從一個可叠代對象計數,或從另一個映射(或計數器)初始化。
1)計數器的創建
from collections import Counter #Counter 需要申明 a=Counter() # 創建空計數器 b=Counter(‘aabbbcccc‘) # 可叠代對象計數的方式創建對象 c = Counter({‘red‘: 4, ‘blue‘: 2}) # 映射方法創建計數器 d = Counter(cats=4, dogs=8) # 鍵值的方法創建計數器
2)計數器元素的刪除
del3)計數器的部分功能屬性
most_common(self, n=None):
把計數器轉化成列表,元素轉化成元組,返回n個最常見的元素及其計數的列表,從最常見到最少見。如果省略n或為None
,most_common()
返回計數器中所有元素。具有相等計數的元素是任意排序的。
elements(self):
返回一個叠代器,對元素重復叠代其計數次。元素以隨機順序返回。如果元素的計數小於1,elements()
將忽略它。
update(*args, **kwds):
元素從一個可叠代對象計數或從另一個映射(或計數器)增加。類似dict.update()
,但增加計數,而不是替換它們。此外,可叠代對象應為一系列元素,而不是(key, value)
對。
subtract(*args, **kwds):demo
從一個可叠代對象或另一個映射(或計數器)中減去元素。類似dict.update()
,但減去計數,而不是替換它們。輸入和輸出都可以為零或負。
OrderedDict
2.有序字典(OrderedDict )
有序字典與常規字典類似,但它們記住鍵值對插入的順序。當對有序字典進行叠代時,項目按它們的鍵首次添加的順序返回。
1)有序字典的創建:demo
2)有序字典的功能:demo
有序字典繼承了字典的功能,下面只介紹與字典不同功能。
popitem(self, last=True):
返回並刪除字典中的鍵值對。如果last為True(默認值),則以LIFO順序返回這些鍵值對,如果為False,則以FIFO順序返回。
move_to_end(self, key, last=True):demo
將一個已存在key移動到有序字典的另一端。如果last為True(默認值),則項目移動到末尾,如果last為False,則移動到開始。如果key不存在,引發KeyError。
demo
3.默認字典(defaultdict)
defaultdict可以把字典指定一個默認value,可以是字典/列表等。返回一個新的類似字典的對象,功能與dict類相同。
如:
應用:demo
默認字典的功能:
defaultdict
4.可命名元組(namedtuple)
1)可命名元組的說明
給元組中每個位置上的元素命名,它們可以使用常規的元組方法,可以讓訪問元素可以按名稱而不是按位置索引。
collections.namedtuple
(typename, field_names, verbose=False, rename=False):
返回一個叫做 typename 的tuple子類,這個新的子類用來創建類tuple(tuple-like)的對象,這個對象擁有可以通過屬性訪問的字段,並且可以通過下標索引和叠代。
field_names 是一個單獨的字符串,這個字符串中包含的所有字段用空格或逗號隔開,例如 ‘xy‘
或 ‘x,y‘
.另外, field_names 也可以是字符串的列表,例如 [‘x‘, ‘y‘]。
如果verbose 為 True, 在類被建立後將打印類的定義。相反,它打印的是類的 _source
屬性,也就是打印源代碼。
如果 rename參數 為 True, 無效的field_names會被自動轉換成位置的名稱.例如, [‘abc‘, ‘def‘, ‘ghi‘, ‘abc‘]
將被轉換為 [‘abc‘, ‘_1‘, ‘ghi‘,‘_3‘]
, 來消除關鍵字 def
和重復的字段名 abc。
2)可命名元組的創建
需要先創建一個類。
from collections import namedtuple myTupleClass=namedtuple(‘myTupleClass‘,[‘x‘,‘y‘]) a=point(1,2) b=point(2,0) print(a,a.x,a.y,type(a)) print(b,b.x,b.y,type(b)) #運行結果 myTupleClass(x=1, y=2) 1 2 <class ‘__main__.myTupleClass‘> myTupleClass(x=2, y=0) 2 0 <class ‘__main__.myTupleClass‘>
3)可命名元組新創建類的功能屬性
如上面創建的myTupleCalss類:
myTupleCalss
5.隊列(deque)
1)雙向隊列(deque)
雙向隊列(Deque)是棧和隊列的一般化。可以在兩端添加和刪除元素。
雙向隊列的創建:
from collections import deque a=deque() b=deque(‘abcd‘) print(a,type(a)) print(b,type(b)) #運行結果 deque([]) <class ‘collections.deque‘> deque([‘a‘, ‘b‘, ‘c‘, ‘d‘]) <class ‘collections.deque‘>
雙向隊列的功能屬性:
deque2)單向隊列(queue.Queue)
class queue.
Queue
(maxsize=0)
單向隊列與雙向隊列的區別是FIFO(先進先出),maxsize是個整數,指明了隊列中能存放的數據個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的數據被取出。如果maxsize小於或者等於0,則隊列大小沒有限制。
單向隊列的創建:
import queue a=queue.Queue() b=queue.Queue(‘abcd‘) print(a,type(a)) print(b,type(b)) #運行結果 <queue.Queue object at 0x00FBB310> <class ‘queue.Queue‘> <queue.Queue object at 0x01522DF0> <class ‘queue.Queue‘>
單向隊列的功能屬性:
queue.Queue
【COLLECTION模塊】