內建模塊collections的使用

# -*-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})
相關文章
相關標籤/搜索