collections是Python內建的一個集合模塊,提供了許多有用的集合類。
1.Counter 計數器
Counter是一個簡單的計數器,例如,統計字符出現的個數:
>>> import collections
>>> obj = collections.Counter('applebanana')
>>> print(obj)
Counter({'a': 4, 'n': 2, 'p': 2, 'e': 1, 'l': 1, 'b': 1})
2.OrderedDict 有序字典
使用dict時,Key是無序的。在對dict做迭代時,我們無法確定Key的順序。
如果要保持Key的順序,可以用OrderedDict:
>>> od = collections.OrderedDict()
>>> od['k2'] ='k2'
>>> od['k1'] = 'k1'
>>> od
OrderedDict([('k2', 'k2'), ('k1', 'k1')])
或
>>> od = collections.OrderedDict([('k2','v2'),('k1','v1')])
>>> od
OrderedDict([('k2', 'v2'), ('k1', 'v1')])
3.defaultdict 默認字典
默認字典會給字典的值設置一個默認類型
import collections
num = [11,22,33,44,55,66,77,88,99]
#爲my_dic字典的值添加默認list類型
my_dic = collections.defaultdict(list)
for i in num:
if i > 66:
my_dic['k1'].append(i)
else:
my_dic['k2'].append(i)
print(my_dic)
4.namedtuple 可命名元祖
namedtuple是一個函數,它用來創建一個自定義的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。
這樣一來,我們用namedtuple可以很方便地定義一種數據類型,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便
>>>person = collections.namedtuple('pp',['name','age'])
>>>p = person('apple',2)
>>>print(p.name)
>>>print(p.age)
5.deque 雙向隊列
使用list存儲數據時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因爲list是線性存儲,數據量大的時候,插入和刪除效率很低。
deque是爲了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧:
>>> dli = collections.deque([1,2,3])
>>> dli.append(4)
>>> dli
deque([1, 2, 3, 4])
>>> dli.appendleft(5) #appendleft向左插入數據
>>> dli
deque([5, 1, 2, 3, 4])
6.queue 單項隊列 (queue模塊中)
import queue
q = queue.Queue()
q.put(123)
q.put(456)
print(q.qsize())
print(q.get())
#q.get()會將單項隊列裏面的數據依次取出來
print(q.get())