collection模块
collection模块在内置的数据类型 比如int str list dict等基础上额外提供了几种数据类型
- namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
- deque : 双端队列 可以快速的从另外一侧追加和推出对象
- Counter 计数器 主要用来计数
- OrderedDict : 有序字典 (python3.6之后默认有序)
- defaultdict 带有默认值的字典
namedtuple()可命名元组
tuple是一个不可变的集合 namedtuple是一个函数 她用来构建一个自定义的tuple对象 并且规定了tuple元素的个数 可通过属性而不是索引来引用tuple的某个元素 我们可以通过namedtuple很方便的自定义一个数据类型 它具有tuple的不变属性 又可以根据属性来引用
可命名元组非常类似一个只有属性没有方法的类
[x,y]是对象属性名
piont是这个类的名字
这个类最大的特点就是一旦实例化 不能修改属性的值
from collections import namedtuple piont=namedtuple('piont',['x','y']) p=piont(2,1) print(p) #piont(x=2, y=1) print("x =",p.x) #x = 2 print("Y =",p.y) #Y = 1 print(isinstance(p,piont)) #True print(isinstance(p,tuple)) #True
有序字典
python3.6之前 字典是无序的 在做迭代时 无法确认key的顺序
orderdDict是对字典类型的补充 它记住了字典元素添加的顺序
from collections import OrderedDict dd = OrderedDict([('a',1),('k1','v1')]) print(dd) for k in dd: print(k,dd[k]) dd['k2'] = 'v2' print(dd)
默认字典 defaultdict
defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
我们都知道,在使用Python原生的数据结构dict的时候,如果用 d[key] 这样的方式访问,
当指定的key不存在时,是会抛出KeyError异常的。但是,如果使用defaultdict,
只要你传入一个默认的工厂方法,那么请求一个不存在的key时,
便会调用这个工厂方法使用其结果来作为这个key的默认值。
'd=defaultdict(list)'中的list必须是可以调用的 如果想传入不可调用的值 可以用lamda返回
from collections import defaultdict d = defaultdict(list) print(d['a']) #[] d['b'].append(123) #可以直接append print(d) #defaultdict(<class 'list'>, {'a': [], 'b': [123]})
用lamda传入值:
func = lambda :'default' d = defaultdict(func) print(d['kkk']) d['k'] = 'vvvvv' print(d)
双端队列
列表的缺点 双端队列可以弥补 (比如列表的insert非常慢 双端队列就很快)
from collections import deque dq = deque() dq.append(1) #在后面添加 dq.append(2) dq.appendleft(3) #在左边添加 print(dq) #deque([3, 1, 2]) 取所有的值 print(dq.pop()) #2 删除最后面的值 并返回 print(dq.popleft()) #3 取左边的数值
队列
import queue q = queue.Queue() # 队列 q.put(1) q.put(2) q.put('aaa') q.put([1,2,3]) q.put({'k':'v'}) print(q.get()) print(q.get()) #get一下 取一个值