python高级容器collections -- Counter

collections模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。

包含namedtupledequeChainMapCounterOrderedDictdefaultdict等。

本章讲解Counter,基于python3.10。

简介

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

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

Counter对象有一个字典接口,如果引用的键没有任何记录,就返回一个0,而不是弹出一个 KeyError 。

Counter元素可以从一个 iterable 被计数或从其他的 mapping (or counter)初始化:

如下一个简单示例:

from collections import Counter

# 列表计数
L = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 
print(Counter(L))  # Counter({'red': 2, 'blue': 3, 'green': 1}
# 字符串计数
Counter('gallahad') 
print(Counter(L))  # ounter({'g': 1, 'a': 3, 'l': 2, 'h': 1, 'd': 1})
# 字典计数
Counter({'red': 4, 'blue': 2})

特殊方法

计数器对象除了字典方法以外,还提供了一些特有方法:

1.elements()
返回一个迭代器,其中每个元素将重复出现计数值所指定次。元素会按首次出现的顺序返回。如果一个元素的计数值小于1,elements() 将会忽略它。

c = Counter(a=4, b=2, c=0, d=-2)
print(list(c.elements()))
print(sorted(c.elements()))
# ['a', 'a', 'a', 'a', 'b', 'b']

2.most_common([n])
返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 None,most_common() 将返回计数器中的 所有 元素。 计数值相等的元素按首次出现的顺序排序。

print(Counter('abracadabra').most_common(3))
# [('a', 5), ('b', 2), ('r', 2)]

3.subtract([iterable-or-mapping])
从 迭代对象 或 映射对象 减去元素。像 dict.update() 但是是减去,而不是替换。输入和输出都可以是0或者负数。

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})

4.total()
计算总计数值。

print(Counter(a=10, b=5, c=3).total())  # 18
# 相当于sum(Counter(a=10, b=5, c=3).values())

注意:

通常字典方法都可用于 Counter 对象,除了有两个方法工作方式与字典并不相同:

Counter 对象没有fromkeys(iterable)方法;

update([iterable-or-mapping])是更新加上元素的计数,而不是字典的更新。

数学操作

python 3.10 新增加了相等性、子集和超集关系等富比较运算:==,!=, <, <=, >, >=

在 3.10 版更改: 在相等性检测中,不存在的元素会被当作计数值为零。 在此之前,Counter(a=3) 和 Counter(a=3, b=0) 会被视为不同。

示例:

c = Counter(a=3, b=-1, c=-2)
d = Counter(a=6, b=2, c=-4)
print(c + d)  # Counter({'a': 9, 'b': 1})
print(c - d)  # Counter({'c': 2}),如果元素相减结果小于等于0,就会删除元素
print(c & d)  # Counter({'a': 3}),数字符号比较,异号会删除元素
print(c | d)  # 数字或比较,如果两个都是符号,删除元素,否则取较大元素
print(c == d)  # False
print(c >= d)  # False ,元素按照顺序比较,如果相等比较下一个

还增加了一元操作符,意思是从空计数器加或者减去。:

c = Counter(a=2, b=-4)
print(+c)
# 相当于
print(Counter() + c)
print(-c)
# 相当于
print(Counter() - c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值