# -*-coding:utf-8 -*- from collections import namedtuple Point=namedtuple('Point',['x','y']) p=Point(1,2) print p.x #1 print p.y #2 # namedtuple是一個函數,它用來建立一個自定義的tuple對象,而且規定了tuple元素的個數,並能夠用屬性而不是索引來引用tuple的某個元素。 # 這樣一來,咱們用namedtuple能夠很方便地定義一種數據類型,它具有tuple的不變性,又能夠根據屬性來引用,使用十分方便。 print isinstance(p,Point) #True print isinstance(p,tuple) # True #若是要用座標和半徑表示一個圓,也能夠用namedtuple定義: Circle=namedtuple('Circle',['x','y','z']) #使用list存儲數據時,按索引訪問元素很快,可是插入和刪除元素就很慢了,由於list是線性存儲,數據量大的時候,插入和刪除效率很低 #deque 是爲了高效實現插入和刪除操做的雙向列表,適合用於隊列和棧: from collections import deque q=deque(['a','b','c']) q.append('x') q.appendleft('y') print q # deque(['y', 'a', 'b', 'c', 'x']) #defaultdict #使用 dict時,若是引用的key不存在,就會拋出keyError.若是但願key不存在時,返回一個默認值,就能夠使用defaultdict: from collections import defaultdict dd=defaultdict(lambda:'N/A') dd['key1']='abc' print dd['key1'] # abc print dd['key2'] # N/A #OrderedDict #使用dict時,key是無序的,在對dict作迭代時,咱們沒法肯定key的順序,若是要保持key的順序,能夠用orderdict from collections import OrderedDict d=dict([('a',1),('b',2),('c',3)]) print d # {'a': 1, 'c': 3, 'b': 2} dict的key是無序的 od=OrderedDict([('a',1),('b',2),('c',3)]) print od # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) #注意,OrderedDict的Key 會按照插入的順序排列,不是key自己排序: od=OrderedDict() od['z']=1 od['y']=2 od['x']=3 print od.keys() # ['z', 'y', 'x'] #Counter是一個簡單的計數器,例如,統計字符出現的個數: from collections import Counter c=Counter() for ch in 'programming': c[ch]=c[ch]+1 print c # Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})