1. 程式人生 > >【COLLECTION模塊】

【COLLECTION模塊】

生成 log sub 另一個 post elf abcd www 對象計數

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)

Counterdict的子類,用於計數可哈希性對象。它是一個無序的容器,元素存儲為字典鍵,計數值存儲為字典值。計數允許任何整數值,包括零或負計數。Counter類相似於bags或multisets等語言類。

它的元素從一個可叠代對象計數,或從另一個映射(或計數器)初始化。

技術分享圖片 Counter

1)計數器的創建

from collections import Counter    #Counter 需要申明

a=Counter()                            # 創建空計數器
b=Counter(‘aabbbcccc‘)                 # 可叠代對象計數的方式創建對象
c = Counter({‘red‘: 4, ‘blue‘: 2})     # 映射方法創建計數器
d = Counter(cats=4, dogs=8)            # 鍵值的方法創建計數器

2)計數器元素的刪除

技術分享圖片 del

3)計數器的部分功能屬性

most_common(self, n=None):

把計數器轉化成列表,元素轉化成元組,返回n個最常見的元素及其計數的列表,從最常見到最少見。如果省略n或為Nonemost_common()返回計數器中所有元素。具有相等計數的元素是任意排序的。

技術分享圖片 demo

elements(self):

返回一個叠代器,對元素重復叠代其計數次。元素以隨機順序返回。如果元素的計數小於1,elements()將忽略它。

技術分享圖片 demo

update(*args, **kwds):

元素從一個可叠代對象計數或從另一個映射(或計數器)增加。類似dict.update(),但增加計數,而不是替換它們。此外,可叠代對象應為一系列元素,而不是(key, value)對。

技術分享圖片 demo
subtract(*args, **kwds):
從一個可叠代對象或另一個映射(或計數器)中減去元素。類似dict.update(),但減去計數,而不是替換它們。輸入和輸出都可以為零或負。
技術分享圖片 demo

2.有序字典(OrderedDict )

有序字典與常規字典類似,但它們記住鍵值對插入的順序。當對有序字典進行叠代時,項目按它們的鍵首次添加的順序返回。
技術分享圖片 OrderedDict
1)有序字典的創建:
技術分享圖片 demo
2)有序字典的功能:
有序字典繼承了字典的功能,下面只介紹與字典不同功能。
popitem(self, last=True):
返回並刪除字典中的鍵值對。如果last為True(默認值),則以LIFO順序返回這些鍵值對,如果為False,則以FIFO順序返回。
技術分享圖片 demo
move_to_end(self, key, last=True):
將一個已存在key移動到有序字典的另一端。如果last為True(默認值),則項目移動到末尾,如果last為False,則移動到開始。如果key不存在,引發KeyError。
技術分享圖片 demo

3.默認字典(defaultdict)
defaultdict可以把字典指定一個默認value,可以是字典/列表等。返回一個新的類似字典的對象,功能與dict類相同。
如:
技術分享圖片 demo
應用:
技術分享圖片 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‘>
技術分享圖片

雙向隊列的功能屬性:

技術分享圖片 deque

2)單向隊列(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模塊】