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 的元素。
  • 相关阅读:
    Caffe2——C++ 预测(predict)Demo
    Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
    Effective C++ 条款05:了解C++编写并调用哪些函数
    Effective C++ 条款04:确定对象被使用前已经先被初始化
    Effective C++ 条款03:尽可能使用const
    Effective C++ 条款02:尽量以const,enum,inline替换 #define
    使用队列(Queue)解决简单的并发问题
    关于C#中Queue的线程安全问题
    C#多线程编程
    跨线程访问控件的问题和编程方法
  • 原文地址:https://www.cnblogs.com/jkklearn/p/11297980.html
Copyright © 2011-2022 走看看