Python教程:Collections模块Counter类详解

1 下载量 69 浏览量 更新于2024-08-28 收藏 107KB PDF 举报
"这篇文章主要介绍了Python的Collections模块中的Counter容器类,它是一个用于计数序列中元素出现次数的工具。" 在Python编程中,`collections`模块提供了多种高级数据结构,如`OrderedDict`、`namedtuple`、`Counter`等。其中,`Counter`是一个特殊的字典子类,它允许我们方便地对序列中的元素进行计数。这个类在Python 2.7版本中被引入,特别适合处理元素频率统计的问题。 **2.Counter类** `Counter`类的核心功能是存储元素及其出现的次数。它的工作方式类似于字典,但自动处理不存在的键(初始计数为0)。创建`Counter`对象有以下几种方式: 1. **空Counter** - 只需调用`Counter()`即可创建一个空的计数器。 2. **从可迭代对象创建** - 提供一个包含各种元素的序列,例如字符串、列表或元组,`Counter`会计算每个元素的出现次数。 3. **从字典创建** - 如果字典的键是元素,值是对应的计数,可以直接使用该字典初始化`Counter`。 **2.1 创建** ```python >>> c = Counter() # 创建空Counter >>> c = Counter('gallahad') # 从字符串创建,'g'出现1次,'a'出现3次,'l'出现2次,'h'和'd'各出现1次 >>> c = Counter({'a': 4, 'b': 2}) # 从字典创建 ``` **2.2 计数值的访问与缺失的键** 计数器可以通过键来访问计数值,如果键不存在,返回的是0。 ```python >>> c['a'] # 输出元素'a'的计数 4 >>> c['x'] # 'x'不存在,返回0 0 ``` **2.3 计数器的更新** `update()`方法用于合并计数器或者更新计数器中的计数值,而`subtract()`则用来减少指定元素的计数。 ```python >>> c.update('hello') # 增加新元素计数或更新已有元素 >>> c.subtract(['a', 'b']) # 减少'a'和'b'的计数 ``` **2.4 键的删除** 由于`Counter`是字典的子类,可以使用`del`关键字删除键,但不会删除计数为0的键。 ```python >>> del c['b'] ``` **2.5 elements()** `elements()`方法返回一个迭代器,按计数顺序生成元素,重复次数与计数对应。 ```python >>> for elem in c.elements(): # 遍历元素 ... print(elem) ... a a a a l l h d ``` **2.6 most_common([n])** `most_common([n])`返回一个列表,包含`(element, count)`元组,按计数降序排列。如果不提供参数`n`,则返回所有元素。 ```python >>> c.most_common() [('a', 4), ('l', 2), ('h', 1), ('d', 1)] ``` **2.7 fromkeys()** `Counter.fromkeys()`创建一个新的`Counter`,其中所有键的计数都为1。 ```python >>> c = Counter.fromkeys(['a', 'b', 'c'], 2) # 所有键计数为2 >>> c Counter({'a': 2, 'b': 2, 'c': 2}) ``` **2.8 浅拷贝copy** `copy()`方法生成计数器的浅拷贝,只复制计数器本身,不复制其存储的元素。 ```python >>> c_copy = c.copy() ``` **2.9 算术和集合操作** `Counter`支持与其它`Counter`或可迭代对象进行算术运算,如`+`、`-`、`*`以及集合操作如`|`、`&`、`^`。 ```python >>> c1 = Counter('abc') >>> c2 = Counter('bde') >>> c1 + c2 # 合并计数 Counter({'b': 2, 'a': 1, 'c': 1, 'd': 1, 'e': 1}) >>> c1 - c2 # 减去c2中有的元素计数 Counter({'a': 1, 'c': 1}) ``` **4. 应用实例** `Counter`在多种场景下都很有用,比如计算文本中单词的频率、分析数据集中的元素分布等。它可以用于构建多元集合(MultiSets),计算概率质量函数(probability mass function),甚至进行贝叶斯统计。 `Counter`是Python中处理元素计数问题的一个强大工具,它的易用性和高效性使得在处理大量数据时能够更加便捷。了解和掌握`Counter`的使用,能够显著提升Python编程的效率。