zoukankan      html  css  js  c++  java
  • 10.2、collections

    namedtuple   namedtuple('名称', [属性list])

     

    deque  支持appendleft()和popleft

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

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

    defaultdict 

    使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict.默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

    OrderedDict

    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

    如果要保持Key的顺序,可以用OrderedDict

     

    from collections import OrderedDict
    class LastUpdatedOrderedDict(OrderedDict):
        def __init__(self,capacity):
            super(LastUpdatedOrderedDict,self).__init__()
            self.capacity=capacity
            
        def __setitem__(self,key,value):
            containsKey=1 if key in self else 0
            if len(self)-containsKey >=self.capacity:
                last=self.popitem(last=False)
                print('removee:',last)
            if containsKey:
                del self[key]
                print('set:',(key,value))
            else:
                print('add:',(key,value))
            OrderedDict.__setitem__(self,key,value)

    ChainMap

    ChainMap可以把一组dict串起来并组成一个逻辑上的dictChainMap本身也是一个dict,但是查找的时候,会按照顺序在内部的dict依次查找。

    什么时候使用ChainMap最合适?举个例子:应用程序往往都需要传入参数,参数可以通过命令行传入,可以通过环境变量传入,还可以有默认参数。我们可以用ChainMap实现参数的优先级查找,即先查命令行参数,如果没有传入,再查环境变量,如果没有,就使用默认参数。

    Counter

    Counter是一个简单的计数器

  • 相关阅读:
    容斥原理
    m元集A到n元集B的满射的个数
    二项式反演公式
    多项式定理
    组合数的基本性质
    Luogu P2408 不同子串个数
    Luogu P5410【模板】扩展 KMP
    Luogu P2336 [SCOI2012]喵星球上的点名
    Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
    Luogu P4248 [AHOI2013]差异
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12655290.html
Copyright © 2011-2022 走看看