zoukankan      html  css  js  c++  java
  • python collections中Counter类

    Counter是dict的一个子类,因此具有dict的属性与方法。如常用的iteritems, items, get, pop。

    class Counter(dict):
    

    如果Key不存在,将返回0,不会引发KeyError异常。

    def __mising__(self, key):
        return 0
    

    elements()

    返回一个生成器,需要用到 itertools 标准库中的chain,starmap,repeat等方法,itertools是关于迭代器的工具。

    def elements(self):
        return _chain.from_iterable(_starmap(_repeat, self.iteritems()))
    

    most_common()

    列出前n个出现次数最多的元素。如果n是默认值(None),将列出所有元素。sorted 是内建函数,返回有序列表。heapq 是关于数据结构堆的操作。

    def most_common(self, n=None):
        if n is None:
            return sorted(self.iteritems(), key=_itemgetter(1), reverse=True)
        return _heapq.nlargest(n, self.iteritems(), key=_itemgetter(1))
    

    update()

    根据参数,增加key的计数。无论输入还是输出,value都允许是负值。
    单从args参数来看,如果args[1]是一个Counter()对象,则在此对象的基础上进行统计。否则,从0计数。
    self_get(elem, 0),如果key不存在的话,则记为0。

    def update(*args, **kwds):
        if not args:
            raise TypeError("descriptor 'update' of 'Counter' object "
                            "needs an argument")
        self = args[0]
        args = args[1:]
        if len(args) > 1:
            raise TypeError('expected at most 1 arguments, got %d' % len(args))
        iterable = args[0] if args else None
        if iterable is not None:
            if isinstance(iterable, Mapping):
                if self:
                    self_get = self.get
                    for elem, count in iterable.iteritems():
                        self[elem] = self_get(elem, 0) + count
                else:
                    super(Counter, self).update(iterable) # fast path when counter is empty
            else:
                self_get = self.get
                for elem in iterable:
                    self[elem] = self_get(elem, 0) + 1
        if kwds:
            self.update(kwds)
    

    substract()

    与update()相反,减少key的计数。

    def subtract(*args, **kwds):
        if not args:
            raise TypeError("descriptor 'subtract' of 'Counter' object "
                            "needs an argument")
        self = args[0]
        args = args[1:]
        if len(args) > 1:
            raise TypeError('expected at most 1 arguments, got %d' % len(args))
        iterable = args[0] if args else None
        if iterable is not None:
            self_get = self.get
            if isinstance(iterable, Mapping):
                for elem, count in iterable.items():
                    self[elem] = self_get(elem, 0) - count
            else:
                for elem in iterable:
                    self[elem] = self_get(elem, 0) - 1
        if kwds:
            self.subtract(kwds)
    

    copy

    返回对象的一个浅拷贝。self.class 指 <class 'collections.Counter'>。

    def copy(self):
        'Return a shallow copy.'
        return self.__class__(self)
    
  • 相关阅读:
    更新我电脑的编译器之Java语言
    HTML/CSS基础
    查找元素的杀手锏xpath
    错误日志的实时抓取保证代码质量
    Splinter常用api
    从底层向上理解Git
    infer运用实践
    流程图在测试用例编写中的运用
    2016小结
    Splinter 查找元素
  • 原文地址:https://www.cnblogs.com/xianwang/p/4979044.html
Copyright © 2011-2022 走看看