zoukankan      html  css  js  c++  java
  • 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 的元素。
  • 相关阅读:
    不同的二叉搜索树
    二叉树展开为链表
    二叉树的中序遍历
    二叉树的直径
    树系列之对称二叉树
    从前序与中序遍历序列构造二叉树
    字符串反转
    旋转图像---二维矩阵
    双指针---最接近的三数之和
    Egret 小游戏实战教程 跳一跳(搬运二)
  • 原文地址:https://www.cnblogs.com/jkklearn/p/11297980.html
Copyright © 2011-2022 走看看