collections是Python内建的一个集合模块,提供了许多有用的集合类。
namedtuple
我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。
from collections import namedtuple
point = namedtuple('point',['x','y'])
a = point(1,2)
print(a.x)
print(a.y)
deque
deque可以高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque
q = deque(['a','b','c'])
q.append('x') # 左边头部添加一个‘x’
q.appendleft('y') #右边头部添加一个'y'
q.pop() #删除左边头部的元素
q.popleft() #删除右边头部的元素
print(q)
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
OrderedDict
如果要保持Key的顺序,可以用OrderedDict:
from collections import OrderedDict
b = OrderedDict([('a',1),('b',2),('c',3)]) # OrderedDict的Key是有序的
print(b)
OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
from collections import OrderedDict
od =OrderedDict()
od['b'] = 1
od['d'] = 2
od['c'] = 3
print(list(od.keys())) # 按照插入的Key的顺序返回
Counter
Counter是一个简单的计数器,例如,统计字符出现的个数:
from collections import Counter
c=Counter()
for ch in 'a;ldkq,kf,falfm':
c[ch]=c[ch]+1
print(c)
Counter实际上也是dict的一个子类,上面的结果可以看出每个字符出现的次数。
小结
collections模块提供了一些有用的集合类,可以根据需要选用。