最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 说说 Python 的 collections.Counter 类型

    正文概述 掘金(deniro)   2020-11-23   343

    collections.Counter 类型可以用来给可散列的对象计数,或者是当成多重集合来使用 —— 多重集合就是集合里的元素可以出现多次1

    collections.Counter 类型类似于其它编程语言中的 bags 或者 multisets2

    (1)基本用法

    counter = collections.Counter(['生物', '印记', '考古学家', '生物', '枣', '印记'])
    logging.info('counter -> %s', counter)
    
    counter.update(['化石', '果实', '枣', '生物'])
    logging.info('counter -> %s', counter)
    
    most = counter.most_common(2)
    logging.info('most -> %s', most)
    
    

    运行结果:

    INFO - counter -> Counter({'生物': 2, '印记': 2, '考古学家': 1, '枣': 1})
    INFO - counter -> Counter({'生物': 3, '印记': 2, '枣': 2, '考古学家': 1, '化石': 1, '果实': 1})
    INFO - most -> [('生物', 3), ('印记', 2)]
    

    示例程序中,首先使用 collections.Counter() 初始化 counter 对象,这时 counter 对象中就已经计算好当前的词语出现次数;collections.Counter() 入参为可迭代对象,比如这里的列表。接着使用 update() 方法传入新词语列表,这时 counter 对象会更新计数器,进行累加计算;最后使用 counter 对象的 most_common() 方法打印出次数排名在前 2 名的词语列表。

    (2)集合运算

    collections.Counter 类型还支持集合运算。

    a = collections.Counter({'老虎': 3, '山羊': 1})
    b = collections.Counter({'老虎': 1, '山羊': 3})
    logging.info('a -> %s', a)
    logging.info('b -> %s', b)
    logging.info('a+b -> %s', a + b)
    logging.info('a-b -> %s', a - b)
    logging.info('a&b -> %s', a & b)
    logging.info('a|b -> %s', a | b)
    

    运行结果:

    INFO - a -> Counter({'老虎': 3, '兔子': 2, '山羊': 1})
    INFO - b -> Counter({'山羊': 3, '老虎': 1})
    INFO - a+b -> Counter({'老虎': 4, '山羊': 4, '兔子': 2})
    INFO - a-b -> Counter({'老虎': 2, '兔子': 2})
    INFO - a&b -> Counter({'老虎': 1, '山羊': 1})
    INFO - a|b -> Counter({'老虎': 3, '山羊': 3, '兔子': 2})
    
    • 示例中的 a 与 b 都是 Counter 类型对象。这里还演示了 Counter 对象可以使用键值对的方式进行初始化操作;
    • a+b 表示并集操作,包含所有元素;
    • a-b 表示差集操作;
    • a&b 表示交集操作;
    • a|b 比较特殊,首先把所有的键囊括进来,然后比较两个对象中的对应键的最大值,作为新对象的值。比如 a 对象中有 '老虎': 3,b 对象中有 '老虎': 1,那么最后得到的对象是 '老虎': 3。

    (3)正负值计数

    Counter 类型中的计数器还支持负值。

    c = collections.Counter(x=1, y=-1)
    logging.info('+c -> %s', +c)
    logging.info('-c -> %s', -c)
    

    运行结果:

    INFO - +c -> Counter({'x': 1})
    INFO - -c -> Counter({'y': 1})
    

    通过简单的 +/- 作为 Counter 类型对象的前缀,就可以实现正负计数过滤。Python 的这一设计很优雅。


    参考资料: 【1】Luciano Ramalho (作者),安道,吴珂 (译者).流畅的Python.人民邮电出版社,2017:149-150. 【2】class collections.Counter.


    起源地下载网 » 说说 Python 的 collections.Counter 类型

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元