collections模塊基本介紹
我們都知道,Python擁有一些內置的數據類型,比如str, int, list, tuple, dict等, collections模塊在這些內置數據類型的基礎上,提供了幾個額外的數據類型:
1.namedtuple(): 生成可以使用名字來訪問元素內容的tuple子類
2.deque: 雙端隊列,可以快速的從另外一側追加和推出對象
3.Counter: 計數器,主要用來計數
4.OrderedDict: 有序字典
5.defaultdict: 帶有默認值的字典
namedtuple()
namedtuple主要用來產生可以使用名稱來訪問元素的數據對象,通常用來增強代碼的可讀性, 在訪問一些tuple類型的數據時尤其好用。
舉個栗子
代碼如下:
# -*- coding: utf-8 -*-
"""
比如我們用戶擁有一個這樣的數據結構,每一個對象是擁有三個元素的tuple。
使用namedtuple方法就可以方便的通過tuple來生成可讀性更高也更好用的數據結構。
"""
from collections import namedtuple
websites = [
('Sohu', 'http://www.google.com/', u'張朝陽'),
('Sina', 'http://www.sina.com.cn/', u'王志東'),
('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
website = Website._make(website)
print website
# Result:
Website(name='Sohu', url='http://www.google.com/', founder=u'/u5f20/u671d/u9633')
Website(name='Sina', url='http://www.sina.com.cn/', founder=u'/u738b/u5fd7/u4e1c')
Website(name='163', url='http://www.163.com/', founder=u'/u4e01/u78ca')
deque
deque其實是 double-ended queue 的縮寫,翻譯過來就是雙端隊列,它最大的好處就是實現了從隊列 頭部快速增加和取出對象: .popleft(), .appendleft() 。
你可能會說,原生的list也可以從頭部添加和取出對象???就像這樣:
代碼如下:
l.insert(0, v)
l.pop(0)
但是值得注意的是,list對象的這兩種用法的時間復雜度是 O(n) ,也就是說隨著元素數量的增加耗時呈 線性上升。而使用deque對象則是 O(1) 的復雜度,所以當你的代碼有這樣的需求的時候, 一定要記得使用deque。
作為一個雙端隊列,deque還提供了一些其他的好用方法,比如 rotate 等。
舉個栗子
代碼如下:
# -*- coding: utf-8 -*-
"""
下面這個是一個有趣的例子,主要使用了deque的rotate方法來實現了一個無限循環
的加載動畫
"""
import sys
import time
from collections import deque
fancy_loading = deque('>--------------------')
while True:
print '/r%s' % ''.join(fancy_loading),
fancy_loading.rotate(1)
sys.stdout.flush()
time.sleep(0.08)
# Result:
# 一個無盡循環的跑馬燈
------------->-------
Counter
新聞熱點
疑難解答