如何使用Python识别序列中最常出现的项

如何使用Python识别序列中最常出现的项?

阅读更多:Python 教程

问题

您需要识别序列中最常出现的项。

解决方案

我们可以使用计数器来跟踪序列中的项。

什么是计数器?

“计数器”是一种映射,它为每个键保持一个整数计数。更新现有键会增加其计数。这个对象用于计算可散列对象的实例或作为多重集合。

“计数器”在您执行数据分析时是最好的伙伴之一。

这个对象在Python中已经存在了相当长的时间,所以对于很多人来说,这将是一个快速的回顾。我们将从collections中导入Counter。

from collections import Counter
Python

传统字典如果存在缺失的键,则会引发键错误。Python的字典将在未找到键时回答一个键错误。

#一个空字典
dict = {}

#检查空字典中的键
dict['mystring']

#错误消息
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-12-1e03564507c6> in <module>
3
4 # check for a key in an empty dict
----> 5 dict['mystring']
6
7 # Error message
KeyError: 'mystring'
Python

在这种情况下,我们如何避免关键错误异常?

计数器是字典的子类,其行为非常类似于字典,但是,如果查找缺少的键而不是引发关键错误,则只返回零。

#定义计数器
c = Counter()
Python
#检查不可用键
print(f"Output\n{c['mystring']}")
Python

输出

0
Python
c['mystring'] += 1
print(f"Output\n{c}")
Python

输出

Counter({'mystring': 1})
Python

示例

print(f"Output\n{type(c)}")
Python

输出

<class 'collections.Counter'>
Python

序列中最常出现的项

计数器的另一个好处是您可以使用对象列表,它将为您计数。它使我们不必建立一个循环来构建我们的计数器。

Counter 
('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())
Python

输出

Counter({'Peas': 1,
'porridge': 3,
'hot': 1,
'peas': 2,
'cold': 1,
'in': 1,
'the': 1,
'pot': 1,
'nine': 1,
'days': 1,
'old': 1})
Python

split将从字符串中取出单词并将它们分成一个单词列表。它会在空格处进行分割。

“计数器”将循环遍历该列表,并计算所有单词的计数,输出结果显示了计数。

更重要的是,我还可以计算短语中最常见的单词。

most_common()方法将给出最常出现的项。

count = Counter('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())
print(f"Output\n{count.most_common(1)}")
Python

输出

[('porridge', 3)]
Python

示例

print(f"Output\n{count.most_common(2)}")
Python

输出

[('porridge', 3), ('peas', 2)]
Python

示例

print(f"Output\n{count.most_common(3)}")
Python

输出

[('porridge', 3), ('peas', 2), ('Peas', 1)]
Python

注意,它返回了一个元组列表。元组的第一部分是单词,第二部分是它的计数。

Counter实例的一个很少被人知道的功能是它们可以使用各种数学运算符轻松合并。

string = 'Peas porridge hot peas porridge cold peas porridge in the pot nine days old'
another_string =
'Peas peas hot peas peas peas cold peas'

a = Counter(string.split())
b = Counter(another_string.split())
Python
# 添加计数
add = a + b
print(f"输出:\n{add}")
Python

输出

Counter({'peas': 7, 'porridge': 3, 'Peas': 2, 'hot': 2, 'cold': 2, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})
Python
# 减去计数
sub = a - b
print(f"输出:\n{sub}")
Python

输出

Counter({'porridge': 3, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})
Python

最后,Counter在存储数据时非常智能。正如上面所见,它在存储时将单词分组,允许我们一起提取它们,这通常被称为多集。

我们可以使用elements一次一个地获取单词。它不记住顺序,但将所有单词放在一起组成一个短语。

示例

print(f"输出:\n{list(a.elements())}")
Python

输出

['Peas', 'porridge', 'porridge', 'porridge', 'hot', 'peas', 'peas', 'cold', 'in', 'the', 'pot', 'nine', 'days', 'old']
Python

示例

print(f"输出:\n{list(a.values())}")
Python

输出

[1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1]
Python

示例

print(f"输出:\n{list(a.items())}")
Python

输出

[('Peas', 1), ('porridge', 3), ('hot', 1), ('peas', 2), ('cold', 1), ('in', 1), ('the', 1), ('pot', 1), ('nine', 1), ('days', 1), ('old', 1)]
Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册