提供计数器工具以支持方便快捷的计数。 例如:

    6. python Collections -- Counter_第1张图片

语法:

    class collections.Counter([iterable-or-mapping])

    Counter是用于计算可哈希对象的字典子类。它是一个无序的集合,其中元素以字典键的形式存储,并将其计数存储为字典值。

    计数允许为包括零或负计数的任何整数值。Counter类与其他语言的bag或multisets类似。

    

    元素从一个迭代中计数或从另一个映射(或计数器)初始化:

    image.png

    新的空的计数器

    来自可迭代器的新计数器

    来自映射的新计数器

    来自关键字args的新计数器


    计数器对象有一个字典接口,只不过它们返回一个零计数而不是引发一个KeyError:

    image.png

#缺少元素的数量为零


        但是,将计数设置为零不会从计数器中删除元素。 使用del可完全删除它:

    image.png

    Counter对象支持除所有字典可用的方法之外的三种方法:

    elements()

            在元素上返回一个迭代器,重复每个元素的次数。

            元素以任意顺序返回。如果一个元素的计数小于1,elements( )将忽略它。

        image.png

        0 和 -2 都小于最低一个元素的要求,所以不输出。


    most_common([n])

            返回n个最常见元素及其计数的列表,从最常见到最少。

            如果省略 n 或 None,则most_common( ) 返回计数器中的所有元素。

            具有相同计数的元素是任意排序的:

    image.png

            列出同一字符重复数量前3的计数,如果不写n,则会打印出所有相同元素的计数。


    subtract([iterable-or-mapping])

    从迭代或从另一个映射(或计数器)中减去元素。与dict.update( )类似,但减去计数而不是替换它们。输入和输出都可以是零或负数。

    image.png

    通常的字典方法可用于Counter对象,除了两个针对计数器的工作方式不同。

    

 fromkeys(iterable)

    Counter对象未实现此类方法。


    update([iterable-or-mapping])

    元素从可迭代计数器或从另一个映射(或计数器)添加。像dict.update()一样,但添加计数而不是替换它们。

    此外,期望迭计是元素序列,而不是(键,值)对的序列。

    

    处理Counter对象的常用模式:

    6. python Collections -- Counter_第2张图片

    #所有计数的总和

    #重置所有计数

    #列出独特元素

    #转换为一个集合

    #转换为常规字典

    #转换为(elem,cnt)对列表

    #从(elem,cnt)对列表中进行转换

    #n最小公共元素

    #删除零和负数


    提供了几个数学运算,用于组合Counter对象以生成多个集合(计数器的计数大于零)。

    加法和减法通过添加或减去相应元素的计数来组合计数器。

    交集和并集返回相应计数的最小值和最大值。

    每个操作都可以接受带符号计数的输入,但输出将排除计数为零或更小的结果。

    6. python Collections -- Counter_第3张图片


    一元加法和减法是添加空白计数器 或 从空白计数器中减去 的快捷方式。

    image.png

        3.3版新增:增加了对一元加号,一元减号和就地多重操作的支持。



注意:

    计数器主要用于处理正整数来表示运行计数;但是,注意不要不必要地排除需要其他类型或负值的用例。

    为了帮助解决这些用例,本节介绍了最小范围和类型限制。

    (1)Counter类本身是一个字典子类,其键和值没有限制。这些值旨在表示计数,但您可以在值字段中存储任何内容。

    (2)most_common( )方法只要求值是可计数的。

    (3)对于诸如 c[key] += 1的就地操作,值类型只需要支持加法和减法。所以分数、浮点数和小数将会起作用,并且负值被支持。

            update( )和subtract( ) 也是如此,它们允许输入和输出的负值和零值的情况。

    (4)multiset方法仅用于具有正值的用例。输入可能为负值或零,但仅创建具有正值的输出。没有类型限制,但值类型需要支持加法,减法和比较。

    (5)elements( )方法需要整数计数。它忽略零和负数。