Python collections

参考链接 https://docs.python.org/zh-cn/3/library/collections.html#collections.namedtuple

collections是Python内建的一个集合模块,提供了许多有用的集合类。这个模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。

 

namedtuple() 创建命名元组子类的工厂函数
deque 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap 类似字典(dict)的容器类,将多个映射集合到一个视图里面
Counter 字典的子类,提供了可哈希对象的计数功能
OrderedDict 字典的子类,保存了他们被添加的顺序
defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
UserDict 封装了字典对象,简化了字典子类化
UserList 封装了列表对象,简化了列表子类化
UserString 封装了列表对象,简化了字符串子类化

 

1  namedtuple() 

命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。

from collections import namedtuple
#info = namedtuple("info",'age,addr') #可以引号引起来,或者空格格隔起来,或者['x','y'] 这样。
#info = namedtuple("info",'age addr')
info = namedtuple("info",['age','addr'])
zhangsan = info(20,"shanxi")
print  zhangsan.age,zhangsan.addr #输出的是 20 shanxi

_make 类方法从存在的序列或迭代实例创建一个新实例。

list = [40,"jiangsu"]
 print info._make(zhangsan) # 输出info(age=20, addr='shanxi')
 print info._make(list)   # 输出 info(age=40, addr='jiangsu')
 
  getattr 获取名字域的值
  
  print getattr(zhangsan,'age') # 输出 20

 2  deque   

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

 deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque
list = deque(['a','b','c','d'],3) # 这个3 指的是 maxlen 最大长度
print list #输出 deque(['b', 'c', 'd'], maxlen=3) 注意将最左端的 ‘a’ 弹出。只保留右边部分

如果 maxlen 没有指定或者是 None ,deques 可以增长到任意长度。否则,deque就限定到指定最大长度。一旦限定长度的deque满了,当新项加入时,

同样数量的项就从另一端弹出。限定长度deque提供类似Unix filter tail 的功能。它们同样可以用与追踪最近的交换和其他数据池活动。

list = deque(['a','b','c','d'])
list.append(
"kk") # 从右边添加 输出 deque(['a', 'b', 'c', 'd', 'kk'])
list.appendleft("kk") #从左边添加  输出 deque(['kk', 'a', 'b', 'c', 'd'])
  
  list.pop()    #去除最右边的元素  输出 deque(['a', 'b', 'c'])
  list.popleft()
#去除最左边的元素  deque(['b', 'c', 'd'])
  
  
 list_2 = ['tt','gg']
  list.extend(list_2)    # 输出deque(['a', 'b', 'c', 'd', 'tt', 'gg'])  扩展deque的右侧,通过添加iterable参数中的元素。
  list.extendleft(list_2) #输出 deque(['gg', 'tt', 'a', 'b', 'c', 'd']) 扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加
  
  
  print list.count('a') #输出 1  计算deque中个数等于 x 的元素。
原文地址:https://www.cnblogs.com/jkklearn/p/11297980.html