coding:utf-8
#collections集合模块,提供集合类
#1.namedtuple
#tuple 表示不变集合,表示坐标p = (1,2).但是很难看出是坐标,定义class 麻烦
from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print(p)
print(p.x)
#namedtuple函数自定义tuple,并且规定tuple 元素个数,并可以用属性,而不是索引访问
print(isinstance(p,Point))
print(isinstance(p,tuple))
#坐标半径表示圆
Circle = namedtuple('Circle',['x','y','r'])
#2.deque
#使用list存储数据,安索引访问很快,插入删除就很慢,因为list是现行存储,数据量大时,插入删除效率低
#deque 是为了高效实现插入和删除操作的双向列表,适用于队列和栈
from collections import deque
q = deque(['a','b','c'])
q.append('d')
q.appendleft('x')
print(q)
#append(),pop()在list末尾操作,appendleft(),popleft()在list头前操作
#3.defaultdict 在dict中,key不存在会抛出KeyError,如果希望key不存在,返回默认值,使用defaultdict
from collections import defaultdict
dd = defaultdict(lambda:'N/A')
dd['key1'] = 'abc'
print(dd["key1"]) #key1存在
print(dd['Key2']) #key2不存在,返回'N/A'
#默认值是在调用函数事返回的,不是创建defaultdict时传入
#4.OrderedDict
#dict的key是无序的,OrderedDict保持key的顺序
from collections import OrderedDict
d = dict([('a',1),('b',4),('c',3)])
print(d)
od = OrderedDict([('a',1),('b',4),('c',3)])
print(od)
#OrderedDict 的key按照插入顺序,而不是key本身
#OrderedDict可以实现一个FIFO的dict,容量超限,删除最早添加的Key
#5.ChinaMap 把一组dict串起来组成一个逻辑dict,ChinaMop本身也是dict,查找时按顺序在内部依次查找
#6.Counter 计数器
from collections import Counter
c = Counter()
for ch in 'proframming':
c[ch] = c[ch] +1
print(c) #统计每个字符出现的次数
c.update('hello') #把hello也统计进去
print(c)