美文网首页
Python Collections之Counter

Python Collections之Counter

作者: 羋学僧 | 来源:发表于2023-03-06 22:55 被阅读0次

Counter() 是 collections 库中的一个函数,可以用来统计一个 python 列表、字符串、元组等可迭代对象中每个元素出现的次数,并返回一个字典。

可以看下常用的 Counter() 例子:

1、以统计列表中的词频为例

列表中含有一串整数,要统计每个数出现的次数,可以像下面这样:

from collections import Counter
 
nums = [1, 1, 1, 6, 6, 6, 7, 8]
count = Counter(nums)  # 统计词频
for k, v in count.items():
    print(k, v)
print(count)
1 3
6 3
7 1
8 1
Counter({1: 3, 6: 3, 7: 1, 8: 1})
2、寻找出现次数最多的 k 个数

出现频率最高的 k 个数字 就可以使用这种方式来解~

使用 Counter 统计完词频后可以使用 most_common 方法来查找出现频率最高的 k 个数字及其出现次数。

from collections import Counter
 
nums = [1, 1, 1, 6, 6, 6, 7, 8]
 
count = Counter(nums)
 
ansdict = count.most_common(2)  # 返回出现次数最多的两个数及其出现的次数
print(ansdict) # 注意输出格式
ans = []
for i in range(len(ansdict)):
    ans.append(ansdict[i][0])  # 提取出出现次数最多的两个数
print(ans)
[(1, 3), (6, 3)]
[1, 6]

class collections.Counter([iterable-or-mapping])

Counter 是dict 的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数

from collections import Counter
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1
print(cnt)
# Counter({'blue': 3, 'red': 2, 'green': 1})
print(cnt.most_common(2))
# [('blue', 3), ('red', 2)]
iterablemapping (or counter)初始化:
c = Counter()                           # a new, empty counter
print(c)
#Counter()
c = Counter('gallahad')                 # a new counter from an iterable
print(c)
# Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
print(c)
# Counter({'red': 4, 'blue': 2})
c = Counter(cats=4, dogs=8)             # a new counter from keyword args
print(c)
# Counter({'dogs': 8, 'cats': 4})
如果Counter引用的键key没有记录,返回0
c = Counter(['one', 'two'])
print(c['three'])
# 0
# 如果key不存在,则输出0

Counter 功能:

  • element

返回一个迭代器,其中每个元素将重复出现计数值次数。 。

# elements() 方法要求正整数计数。忽略0和负数计数。
c = Counter(a = 4, b = 3, c = 0, d = -2)
print(sorted(c.elements()))
# ['a', 'a', 'a', 'a', 'b', 'b', 'b']
  • most_common([n])

返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 None, 将返回计数器中的 所有 元素。

c = Counter('academic')
print(c.most_common(2))
# [('a', 2), ('c', 2)]
print(c.most_common())
# N为空或者None,则返回全部值,顺序为出现的顺序
# [('a', 2), ('c', 2), ('d', 1), ('e', 1), ('m', 1), ('i', 1)]
  • subtract([iterable or mapping])

执行减法操作

# 对象为mapping
c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
print(c)
# Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
# 对象为str,为iterable对象
c = Counter('apple')
d = Counter('appd')
c.subtract(d)
print(c)
# Counter({'l': 1, 'e': 1, 'a': 0, 'p': 0, 'd': -1})
  • +/ -

单目加和减(一元操作符)意思是从空计数器加或者减去。

+: 删掉计数为负的值,留下为正的

-: 删掉计数为正的值,留下为负的

c = Counter(a = 3, b = 2, c =1, d = -1)
print(+c)
# Counter({'a': 3, 'b': 2, 'c': 1})
print(-c)
# Counter({'d': 1})
  • 数学操作 (+、-、|、&)

加和减,结合计数器,通过加上或者减去元素的相应计数。交集和并集返回相应计数的最小或最大值。每种操作都可以接受带符号的计数,但是输出会忽略掉结果为零或者小于零的计数。

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
print(c + d)
# Counter({'a': 4, 'b': 3})
print(c - d)
# Counter({'a': 2}), b值为负,所以不显示
print(c | d)
# Counter({'a': 3, 'b': 2})
print(c & d)
# Counter({'a': 1, 'b': 1})

其他方法

c = Counter(a = 3, b = 2, c =1, d = -1)
print(sum(c.values()))
# 5
print(set(c))
# {'b', 'd', 'a', 'c'}
print(list(c))
# ['a', 'b', 'c', 'd']
print(dict(c))
# {'a': 3, 'b': 2, 'c': 1, 'd': -1}
print(c.items())
# dict_items([('a', 3), ('b', 2), ('c', 1), ('d', -1)])

相关文章

网友评论

      本文标题:Python Collections之Counter

      本文链接:https://www.haomeiwen.com/subject/qzhvldtx.html