most_common() 是 Counter 类一个非常有用的方法,用于获取计数器中出现次数最多的前 N 个元素。

most_common() 的基本用法
该方法返回一个包含元组的列表,每个元组格式为 (元素, 计数),并按计数值从高到低排序。
语法
Counter.most_common(n)
n: 一个整数,指定要返回的前 N 个最常见的元素。- 返回值: 一个列表,其中包含
n个(元素, 计数)的元组,如果省略n或n大于元素总数,则返回所有元素,按计数从高到低排序。
代码示例
让我们通过几个例子来理解它的用法。
示例 1:获取最常见的几个元素
这是最常见的用法。
from collections import Counter
# 创建一个 Counter 对象
text = "abracadabra"
c = Counter(text)
print("原始 Counter 对象:", c)
# 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
# 获取最常见的 1 个元素
print("最常见的 1 个元素:", c.most_common(1))
# 输出: [('a', 5)]
# 获取最常见的 3 个元素
print("最常见的 3 个元素:", c.most_common(3))
# 输出: [('a', 5), ('b', 2), ('r', 2)]
示例 2:获取所有元素(按频率排序)
如果不提供参数 n,most_common() 会返回所有元素,并按频率降序排列。

from collections import Counter
text = "mississippi"
c = Counter(text)
print("获取所有元素(按频率排序):", c.most_common())
# 输出: [('i', 4), ('s', 4), ('p', 2), ('m', 1)]
注意: 当有多个元素的计数相同时(如 'i' 和 's'),它们的相对顺序是不确定的,在 Python 3.7+ 中,它们会按照元素首次被插入的顺序排列,但在旧版本中顺序可能不同,这通常不影响使用,因为它们的计数是相同的。
示例 3:n 大于元素总数
n 的值超过了 Counter 中唯一元素的数量,它会返回所有元素,同样按频率排序。
from collections import Counter
c = Counter({'apple': 3, 'banana': 2})
# 请求最常见的 5 个元素,但只有 2 个
print("请求 5 个,但只有 2 个:", c.most_common(5))
# 输出: [('apple', 3), ('banana', 2)]
示例 4:n 为 0 或负数
n 为 0 或负数,most_common() 会返回一个空列表。
from collections import Counter
c = Counter({'a': 1, 'b': 2})
print("n=0:", c.most_common(0)) # 输出: []
print("n=-1:", c.most_common(-1)) # 输出: []
实际应用场景
most_common() 在很多实际场景中都非常有用。
查找文本中出现频率最高的词
from collections import Counter
import re
# 一段示例文本
article = """
Python is an amazing programming language. It is versatile, easy to learn, and powerful.
Many developers love Python for its simplicity and rich ecosystem of libraries.
Learning Python opens up many opportunities in the field of data science and web development.
"""
# 清理文本:转为小写并移除标点
words = re.findall(r'\b\w+\b', article.lower())
# 统计词频
word_counts = Counter(words)
# 获取出现频率最高的 5 个词
top_5_words = word_counts.most_common(5)
print("文章中出现频率最高的 5 个词:")
for word, count in top_5_words:
print(f"- {word}: {count} 次")
# 输出可能为:
# - python: 4 次
# - is: 2 次
# - an: 1 次
# - amazing: 1 次
# - programming: 1 次
# (注意:计数可能因清理方式略有不同)
分析投票结果
假设有一个投票列表,我们需要找出得票最多的候选人。
from collections import Counter
votes = [
'Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Alice',
'David', 'Charlie', 'Alice', 'Bob', 'Alice'
]
vote_counts = Counter(votes)
# 获得票最多的候选人
winner, vote_num = vote_counts.most_common(1)[0]
print(f"获胜者是: {winner},获得了 {vote_num} 票!")
# 输出: 获胜者是: Alice,获得了 5 票!
查找最常见的用户错误日志
from collections import Counter
error_logs = [
'404 Not Found', '500 Internal Server Error', '404 Not Found',
'403 Forbidden', '500 Internal Server Error', '404 Not Found',
'200 OK', '500 Internal Server Error'
]
error_counts = Counter(error_logs)
print("最常见的错误类型:")
for error, count in error_counts.most_common():
print(f"- {error}: {count} 次")
# 输出:
# - 404 Not Found: 3 次
# - 500 Internal Server Error: 3 次
# - 403 Forbidden: 1 次
# - 200 OK: 1 次
| 特性 | 描述 |
|---|---|
| 所属模块 | collections.Counter |
| 方法名 | most_common(n) |
| 功能 | 返回一个列表,包含前 N 个出现频率最高的元素及其计数。 |
| 排序 | 结果按计数从高到低降序排列。 |
参数 n |
- 如果省略,返回所有元素。 - 如果为 0 或负数,返回空列表。 - 如果大于元素总数,返回所有元素。 |
| 返回值 | 一个 [(element, count), ...] 形式的列表。 |
Counter.most_common() 是 Python 中进行频率统计和排序的利器,简洁、高效且功能强大,是数据分析和文本处理的必备工具。
