Python 的 Collection 庫


Collections 是 Python 內建的一個集合模塊,提供了許多額外的數據類型。

namedtuple

namedtuple 主要用來生成可以使用名稱來訪問元素的數據對象,通常用來增強代碼的可讀性。

namedtuple 是一個函數,它用來創建一個自定義的 tuple 對象,並且規定了 tuple 元素的個數,可以用屬性而不是索引來寫入或者訪問 tuple 的某個元素。

>>> from collections import namedtuple
>>> Point = namedtuple('Point',['x','y'])
>>> p = Point(1,2)
>>> print(p.x,p.y)
1 2
>>> Web = namedtuple('web',['name','type','url'])
>>> p1 = Web('google','search','www.google.com')
>>> p2 = Web('sina','portal','www.sina.com.cn')
>>> print(p1)
Web(name='google',type='search',url='www.google.com')

deque

使用 list 存儲數據時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為 list 是線性存儲,數據量大的時候,插入和刪除效率很低。

deque 是為了實現高效插入和刪除操作的雙向列表,適合用於隊列和棧。

deque 在插入數據時速度比 list 快很多,當然這個是相對於存在大量數據的 list 而言的。

>>> from collections import deque
>>> import time
>>> q = deque(['a','b','c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> print(q)
deque(['y','a','b','c','x'])

對比一下 deque 和 list 的速度。對含有 1 億個元素的 list 執行插入:

>>> q0 = [x*x for x in range(100000000)]
>>> a = time.time()
>>> q0.insert(0,888)
>>> b = time.time()
>>> print(b-a)
0.09701275825500488

對含有 1 億個元素的 deque 執行插入:

>>> q1 = deque(q0)
>>> a = time.time()
>>> q1.appendleft(888)
>>> b = time.time()
>>> print(b-a)
0.0009984970092773438

defaultdict

在使用原生的 dict 的時候,如果用 d[key] 這樣的方式訪問,當指定的 key 不存在時,會拋出 KeyError 異常,也就是發生錯誤。

如果使用 defaultdict,只要你傳入一個默認的方法,那么請求一個不存在的 key 時,便會調用這個方法,使用其結果來作為這個 key 的默認值。

>>> from collections import defaultdict
>>> i = defaultdict(lambda:100)
>>> i['name']='David'
>>> print(i['name'])
David
>>> print(i['score'])
100

OrderedDict

原生的 dict 的 key 是無序的。而使用 OrderedDict,追加一對 key value。OrderedDict 的 key 會按照插入的順序排列。

其他的方法基本一致。

Counter

Counter 提供了一個簡單的計數器功能。

>>> from collections import Counter
>>> s = input('Please input:')
Please input:abcddeee
>>> s = s.lower()
>>> c = Counter(s)
>>> print(c.most_common(5)) # 獲取出現頻率最高的5個字符
[('e',3),('d',2),('b',1),('c',1),('a',1)]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM