python中统计列表中各个元素个数/次数的模块

参考:https://jingyan.baidu.com/article/47a29f24ef75ce80142399dc.html
并感谢https://blog.csdn.net/qq_17753903/article/details/85345996博主对于可哈希的简单易懂的解释~~

正文开始:
需要用到collections模块的Counter类。神器!

import collections.Counter
Counter 常用法举例
  • 直接显示各个元素频次
  • 可以使用most_common显示最多的n个元素
  • 可以使用数组下标的访问方式像字典一样获取某个元素的出现次数
import collections

a='1234234567'
b=collections.Counter(a)

print(b)
print(b.most_common)
print(b.most_common(2))
print("number of '2': {}".format(b['2']))

对应输出

Counter({'2': 2, '3': 2, '4': 2, '1': 1, '5': 1, '6': 1, '7': 1})
<bound method Counter.most_common of Counter({'2': 2, '3': 2, '4': 2, '1': 1, '5': 1, '6': 1, '7': 1})>
[('2', 2), ('3', 2)]
number of '2': 2
  • Counter不仅可以统计字符串内元素情况,还可以统计列表内元素情况,只要列表对象是hashable的。

  • 得到Counter计数器对象后,还可以在上面做加减的增量更新。使用subtract成员函数,从计数结果中减去一些元素;通过update函数可以增加元素统计。

b.subtract('abc')
print(b)
b.update('opq')
print(b)
Counter({'2': 2, '3': 2, '4': 2, '1': 1, '5': 1, '6': 1, '7': 1, 'a': -1, 'b': -1, 'c': -1})
Counter({'2': 2, '3': 2, '4': 2, '1': 1, '5': 1, '6': 1, '7': 1, 'o': 1, 'p': 1, 'q': 1, 'a': -1, 'b': -1, 'c': -1})
什么是hashable?

不严谨但易懂的解释:

一个对象在其生命周期内,如果保持不变,就是hashable(可哈希的)。

hashable ≈ imutable 可哈希 ≈ 不可变

在Python中:

list、set和dictionary 都是可改变的,比如可以通过list.append(),set.remove(),dict[‘key’] = value对其进行修改,所以它们都是不可哈希的;

而tuple和string是不可变的,只可以做复制或者切片等操作,所以它们就是可哈希的。
官方解释:

An object is hashable if it has a hash value which never changes during its lifetime (it needs a hash() method), and can be compared to other objects (it needs an eq() or cmp() method). Hashable objects which compare equal must have the same hash value.

Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally.

All of Python’s immutable built-in objects are hashable, while no mutable containers (such as lists or dictionaries) are. Objects which are instances of user-defined classes are hashable by default; they all compare unequal, and their hash value is their id().
感谢博主
————————————————
版权声明:本文为CSDN博主「shangyj17」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17753903/article/details/85345996

发布了11 篇原创文章 · 获赞 4 · 访问量 5133
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览