当我们需要对某些对象进行计数统计时,使用Python的Counter类可以实现快速、方便并且可读性高的代码。在这里,我将给大家介绍如何使用Python的Counter类进行映射,包括如何创建计数器、如何更新计数器、如何访问计数器数据及如何进行排序等。下面进入正题。
创建计数器
要使用Counter类,首先需要在代码中导入该库:
from collections import Counter
随后,可以通过两种方式创建计数器,第一种方式是使用可迭代对象,例如列表、元组、字符串等:
lst = [1,2,2,3,3,3]
cnt = Counter(lst)
print(cnt)
输出结果如下:
Counter({3: 3, 2: 2, 1: 1})
第二种方式是通过传入关键字参数创建计数器:
cnt = Counter(a=3, b=2, c=1)
print(cnt)
输出结果如下:
Counter({'a': 3, 'b': 2, 'c': 1})
注意,当使用关键字参数创建计数器时,参数名就是要统计的元素,而该参数的值表示该元素的数量。以上两种方式都可以使我们创建一个计数器。
更新计数器
一旦我们创建了一个Counter对象,就可以向其添加元素、删除元素或更新元素的数量。要增加计数器中特定元素的数量,使用update()方法:
cnt.update([1,2,2,3,3,3])
print(cnt)
输出结果如下:
Counter({'a': 3, 'b': 2, 'c': 1, 1: 2, 2: 4, 3: 6})
这里列表[1,2,2,3,3,3]中每个元素的数量都增加了相应的数量(1加1,2加2,3加3)。
要将Counter对象中的元素数量减少,可以使用subtract()方法:
cnt.subtract({'a': 1, 'f': 5})
print(cnt)
输出结果如下:
Counter({'f': -5, 3: 6, 2: 4, 1: 2, 'a': 2, 'b': 2, 'c': 1})
在这个例子中,'a'的数量减少了1,'f'被添加到计数器中,并且其数量为-5(这意味着它在计数器中的数量仍为0)。
访问计数器数据
要访问Counter对象中的数据,可以使用keys()、values()和items()方法。
print(list(cnt.keys())) # 输出所有键
print(list(cnt.values())) # 输出所有值
print(list(cnt.items())) # 输出所有键值对
输出结果如下:
[1, 2, 3, 'a', 'b', 'c', 'f']
[2, 4, 6, 2, 2, 1, -5]
[(1, 2), (2, 4), (3, 6), ('a', 2), ('b', 2), ('c', 1), ('f', -5)]
排序
我们可以根据元素的出现次数对Counter对象进行排序,其中most_common()方法可用于返回一个元素列表,按出现频率从高到低排列。
print(cnt.most_common()) # 按出现频率从高到低排列所有元素
输出结果如下:
[(3, 6), (2, 4), (1, 2), ('a', 2), ('b', 2), ('c', 1), ('f', -5)]
我们还可以向most_common()方法中传入一个参数,表示返回的元素数量。
print(cnt.most_common(3)) # 返回出现频率最高的三个元素
输出结果如下:
[(3, 6), (2, 4), (1, 2)]
示例1
我们从文件中读取了一段文字,现在需要对该文字中出现的单词进行频率统计,代码如下:
with open('words.txt', 'r') as f:
words = f.read().split()
cnt = Counter(words)
print(cnt.most_common(10))
在这个例子中,我们将整个文件读入一个字符串中,然后使用split()方法将其拆分成单个单词。接下来,我们创建一个Counter对象来统计每个单词的数量,并返回出现频率最高的10个单词的列表。
示例2
我们有两个集合,分别是购物车中商品和用户历史购买记录中商品。考虑重复购买的情况,如何得到用户无重复商品总数与所有商品购买总数?这时,我们可以使用Counter类来处理。代码如下:
cart = ['apple', 'banana', 'banana', 'orange', 'pear', 'pineapple']
history = ['banana', 'pineapple', 'peach', 'apple', 'grape', 'banana']
cart_cnt = Counter(cart)
history_cnt = Counter(history)
total_unique = len(cart_cnt) + len(history_cnt)
total_count = sum(cart_cnt.values()) + sum(history_cnt.values())
print(total_unique, total_count)
在这个例子中,我们使用Counter类来计算购物车和历史记录中各个商品的数量。随后,通过计算两个Counter对象的长度和值总和,得到用户无重复商品总数和所有商品购买总数。
以上就是使用Python的Counter类进行映射的方法。注意,这个类的使用方法非常简单,而且可以节省大量的代码和计算时间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 用Counter做映射 - Python技术站