zoukankan      html  css  js  c++  java
  • collections模块

      collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaultdict、namedtuple和OrderedDict等。

    1. namedtuple:生成可以使用名字来访问元素内容的tuple子类

    2. deque:双端队列,可以快速的从另外一侧追加和推出对象

    3. Counter:计数器,主要用于计数

    4. OrderedDict:有序字典

    5. defaultdict:带有默认值的字典

    namedtuple

    我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:p=(1,2)

    但是,看到(1,2),很难看出这个tuple是用来表示坐标的。

    那么,我们的namedtuple就能用上了。 

    namedtuple('名称',‘属性list’)

    from collections import namedtuple
    Point = namedtuple('Point',['x','y'])
    p = Point(1,2)
    print(p.x)  # 1
    print(p.y)  # 2

    可以验证创建的Point对象是tuple的一种子类:

    print(isinstance(p,Point))  # True
    print(isinstance(p,tuple))  # True

    deque

      使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

    from collections import deque
    q = deque(['a','b','c','d'])
    q.append('e')
    q.appendleft('A')
    print(q)    # deque(['A', 'a', 'b', 'c', 'd', 'e'])
    q.pop()
    q.popleft()
    print(q)    # deque(['a', 'b', 'c', 'd'])

    defaultdict

      使用dict时,如果引用的Key不存在,就会抛出异常。如果希望key不存在时,返回一个默认值,就可以使用defaultdict。

    from collections import defaultdict
    d = defaultdict(lambda:'N/A')
    d['key1'] = 'abc'
    print(d['key1'])    # abc
    print(d['key2'])    # N/A

    注意默认值是调用函数返回的,而函数在创建defaultdict对象是传入。

    除了在key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

    OrderDict

    使用字典时,key是无序的。在对字典做迭代时,我们无法确定key的顺序。如果要保持key的顺序,可以用OrderedDict

    from collections import OrderedDict
    d = dict([('a',1),('b',2),('c',3)])
    print(d)    # {'a': 1, 'c': 3,'b': 2}   dict的key是无序的
    od = OrderedDict([('a',1),('b',2),('c',3)])
    print(od)   # OrderedDict([('a', 1), ('b', 2), ('c', 3)])   OrderedDict的key是有序的

    意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

    from collections import OrderedDict
    od = OrderedDict()
    od['z'] = 1
    od['y'] = 2
    od['x'] = 3
    print(od.keys())    # odict_keys(['z', 'y', 'x'])

    Counter

    Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。

    from collections import Counter
    c = Counter()
    for i in 'asdsadsafjzjk':
        c[i]+=1
    print(c)    # Counter({'a': 3, 's': 3, 'd': 2, 'j': 2, 'f': 1, 'z': 1, 'k': 1})
    
    cc = Counter('asdsadsafjzjk')
    print(cc)   # Counter({'a': 3, 's': 3, 'd': 2, 'j': 2, 'f': 1, 'z': 1, 'k': 1})
  • 相关阅读:
    论学究式教育
    Oracle中rownum与order by的执行顺序
    无效存储过程问题解决
    解决SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大导致数据无法启动的错误
    ORACLE 按时间创建分区表
    Timage Canvas画图
    Oracle存储过程的加密
    Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息
    win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法
    win32 对话框模板添加加速键
  • 原文地址:https://www.cnblogs.com/ForT/p/10098774.html
Copyright © 2011-2022 走看看