python——collections模塊

該模塊實現了專門的數據類型,爲Python內置數據類型dict、list、set和tuple提供了替代方案。

常用類和方法

collections模塊內包括很多類,因爲這些類分別繼承了內置類型,所以除了新定義的方法外,還能使用超類的方法。

常見類有四個,deque生成一個雙向隊列,可以高效的在首尾增刪元素;defaultdict建立有默認鍵值的字典,普通字典若檢索不存在的鍵會報錯;OrderedDict建立有序字典,順序是鍵的輸入順序;Counter返回一個有記數功能的字典。
注意:defaultdict、OrderedDict和Counter都是dict的子類,本質是字典;deque本質是list。

namedtuple是一個方法,可以自定義tuple對象,定義元素名稱和數量。

collections.deque([iterable[, maxlen]]) --> deque object
#生成的實例在list所有的方法上,新加了popleft、appendleft、extendleft方法
collections.defaultdict(default_factory[, ...]) --> dict with default factory
#輸入:str  默認鍵值:''
#輸入:int  默認鍵值:0
#輸入:list  默認鍵值:[]
#輸入:set  默認鍵值:set()

注意:此處輸入可以使用匿名函數lambda,指定具體的默認鍵值,而不是如上都是空值。舉例見下文。

collections.OrderedDict(builtins.dict)
#輸入參數是一個python的dict類型變量,也可以不輸入參數,直接建立一個空的有序字典
collections.Counter(builtins.dict)
#若有輸入參數,則對其記數,輸入參數可以是字符串、列表、字典、集合等;也可以沒有輸出參數,創建一個空的統計字典
collections.namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
#返回對象具有tuple的不變性,同時可以使用命名引用元素

示例

deque
import collections
data=collections.deque([1,2,3])
#deque([1, 2, 3])
data.append(4)
data.appendleft(0)
#deque([0, 1, 2, 3, 4])
data.pop()
data.popleft()
#deque([1, 2, 3])
#deque可以生成一個雙向隊列,首尾均可以方便的添加、刪除元素。
#輸入若爲字符串,則自動轉爲列表
defaultdict
import collections
data=collections.defaultdict(str)
data  # defaultdict(str, {})  表示生成了一個默認鍵值爲''的字典
data['a']  # '' 因爲字典中沒有'a'鍵,輸出空字符串
data=collections.defaultdict(lambda: 5)
#默認鍵值爲5
data=collections.defaultdict(lambda: [1,2])
#默認鍵值爲[1,2]
OrderedDict
import collections
data=collections.OrderedDict()
data['c']=1
data['b']=1
data['a']=1
data    # OrderedDict([('c', 1), ('b', 1), ('a', 1)])  字典內部順序取決於輸入順序
Counter
import collections
collections.Counter('445322264')
#Counter({'4': 3, '5': 1, '3': 1, '2': 3, '6': 1})  對字符串進行了統計的字典
collections.Counter(['abc','ss','abc','s','ss'])
#Counter({'abc': 2, 'ss': 2, 's': 1})
collections.Counter('445322264').most_common(3)
#[('4', 3), ('2', 3), ('5', 1)]   
#most_common是Counter類的方法,可以列出n個最多的元素,從大到小排列,若n爲None,則全列出。
namedtuple
import collections
coordinate=collections.namedtuple('coordinate',['x','y','z'])
p=coordinate(1,2,3)
p.x  # 1
p    # coordinate(x=1,y=2,z=3)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章