Python 中的 Counter | 如何初始化和更新

3 Dec 2024 | 6 分钟阅读

在本教程中,我们将讨论 collections 模块中包含的 Counter。我们还将解释如何使用它来解决问题。首先,让我们对 Counter 进行简要介绍。

什么是 Counter?

在 Python 中,Counter 是 collections 模块中的一个类,用于计算可迭代对象(如列表或字符串)中元素的出现次数。它提供了一种创建元素频率图的便捷方法,并且类似于字典但针对计数进行了优化。

每个元素都存储为键,其计数存储为相应的值。如果一个元素出现多次,其计数会相应增加。Counter 会自动将缺失的元素初始化为零,这使得在无需手动检查键是否存在的情况下进行计数变得理想。

语法

初始化

我们可以通过以下任一方式调用 counter 的构造函数

  • 我们可以用一系列项来调用它。
  • 使用包含键和计数的字典。
  • 使用字符串。
  • 使用将字符串名称映射到计数的关键字参数。

为什么我们使用 Counter?

以下是使用 Python 程序中的 Counter 的主要原因。

  • Counter 用于存储无序集合中的数据,与哈希表对象相同。元素表示为键,计数为值。
  • 它提供了对可迭代列表中的项进行计数的便利。
  • 我们可以对 Counter 执行基本的算术运算,如加法、减法、交集和并集。
  • Counter 还可以计算来自另一个 Counter 的元素。

Counter 的实现

Python 以列表、字典、元组、字符串等可迭代对象作为参数,并返回每个元素的计数。

考虑以下包含多个元素的列表。

List1 = [a, b, a, a, c, d, e, c, d, f]

列表中有重复的元素。我们将使用计数来显示这些元素出现的次数。让我们看下面的例子。

示例 - 1

输出

Counter({'a': 3, 'c': 2, 'd': 2, 'b': 1, 'e': 1, 'f': 1})

所以我们有 a 的计数为 3,b 为 1,e 为 1,c 为 2,f 为 1。

示例 - 2

输出

Counter({'X': 4, 'Y': 4, 'Z': 2})
Counter({'X': 5, 'Z': 4, 'Y': 2})
Counter({'B': 5, 'A': 3, 'C': 2})

更新 Counter

collections 模块提供了 update() 方法,允许我们更新或添加值。语法如下:

让我们理解下面的例子。

示例 -

输出

Counter({'o': 4, ' ': 3, 't': 3, 'a': 3, 'e': 2, 'l': 2, 'T': 2, 'i': 2, 'W': 1, 'c': 1, 'm': 1, 'J': 1, 'v': 1, 'p': 1, 'n': 1, 'u': 1, 'r': 1, 's': 1, '!': 1})

访问 Counter

我们可以访问 Counter 中的值。让我们理解下面的例子。

示例 -

输出

u : 2
T : 2
u : 1
t : 3
o : 4
r : 1
i : 2
a : 3
l : 2
s : 1

从 Counter 中删除元素

del 关键字用于从 counter 中删除元素。让我们理解下面的例子。

示例 -

输出

Dictionary After Deletion: Counter({'a': 3, 'b': 1})

在 Python Counter 上执行算术运算

如上所述,我们可以执行各种算术运算,如加法、减法、交集和并集。让我们理解下面的例子。

示例 -

输出

Counter({'b': 11, 'c': 11, 'd': 7, 'a': 5})
Counter({'a1': 10, 'd': 7, 'a': 5})
Counter({'b': 1})
Counter({'c': 14, 'b': 10, 'd': 7, 'a': 5})

带字符串的 Counter

正如我们所知,Python 中的一切都是对象,所以字符串也是对象。字符串是用双引号括起来的字符。Python 没有字符类型。

在下面的例子中,我们将字符串传递给 Counter,它将返回一个键/值对的字符字典。键是元素,值是计数。

示例 -

输出

Counter({'o': 4, ' ': 3, 't': 3, 'a': 3, 'e': 2, 'l': 2, 'T': 2, 'i': 2, 'W': 1, 'c': 1, 'm': 1, 'J': 1, 'v': 1, 'p': 1, 'n': 1, 'u': 1, 'r': 1})

带字典的 Counter

字典在花括号内定义的键值对中存储元素。当我们把字典传给 Counter 时,它会返回一个哈希表对象元素。元素将成为键,值将作为给定字典中的元素进行计数。

让我们理解下面的例子。

示例 -

输出

Counter({'b': 6, 'a': 5, 'c': 2})

带元组的 Counter

元组是不可变的结构,其中元素用逗号分隔并存储在圆括号内。元组被转换为哈希表对象。Counter 将提供给定元组中每个元素的计数。元素将成为键,值将作为给定字典中的元素进行计数。

让我们理解下面的例子。

示例 -

输出

Counter({'x': 4, 'y': 2, 'z': 2})

Python Counter 中的一些重要方法

以下是一些常用的 Counter 方法。

  • elements() 方法 - 此方法返回计数大于 0 的元素。计数为 0 或 -1 的元素将被完全省略。

示例 -

输出

a
a
a
a
a
b
b
  • most_common(value) - 它从 Counter 列表中返回最常见的元素。它首先按最常见元素排序字典,然后是下一个元素。如果我们不将值传递给 most_common() 方法,它将第一个元素作为最常用的元素,最后一个元素作为最不常用的元素进行排序。让我们看下面的例子。

示例 -

输出

[('a', 5), ('b', 2)]
[('a', 5), ('b', 2), ('d', 0), ('c', -2)]
  • subtract() 方法 - 执行减法后,它返回一个新的 Counter 对象。让我们理解下面的例子。

示例 -

输出

Counter({'z': 7, 'x': 2, 'y': -2})

结论

在本教程中,我们涵盖了 Python Counter 的几乎所有重要概念。Counter 是一种容器,它存储容器中每个可用元素的计数。Counter 允许我们对可迭代列表中的项进行计数,我们也可以将其用于其他可迭代对象。