Python-容器之计数字典Counter

目录

介绍

创建

操作符

求并集 +

求交集 &

求差集 -

方法

返回元素迭代器

返回高频元素

视图

求差集

函数

转列表

长度

参考


介绍

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

创建

Counter([iterable-or-mapping]),可迭代的或映射的可哈希对象都可以

>>> from collections import Counter
>>> Counter()
Counter()
>>> Counter('lady_killer9')
Counter({'l': 3, 'a': 1, 'd': 1, 'y': 1, '_': 1, 'k': 1, 'i': 1, 'e': 1, 'r': 1, '9': 1})
>>> Counter({'res':4,'blue':2})
Counter({'res': 4, 'blue': 2})
>>> Counter(cats=4,dogs=6)
Counter({'dogs': 6, 'cats': 4})

列表也是可以的

>>> Counter([7,7,8,9])
Counter({7: 2, 8: 1, 9: 1})

操作符

求并集 +

>>> Counter([1,2,3,4])+Counter([3,4,5,6])
Counter({3: 2, 4: 2, 1: 1, 2: 1, 5: 1, 6: 1})

不保持计数使用操作符|,因为我们使用这个数据结构就是计数方便,所以几乎并不用,也提一下吧

>>> Counter([1,2,3,4]) | Counter([3,4,5,6])
Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})

求交集 &

>>> Counter([1,2,3,4]) & Counter([2,3,5])
Counter({2: 1, 3: 1})

求差集 -

>>> Counter([1,2,3,4]) - Counter([2,3,5])
Counter({1: 1, 4: 1})

方法

返回元素迭代器

elements

返回一个迭代器,每个元素重复计数的个数。元素顺序是任意的。

>>> Counter(a=2,b=3,c=0)
Counter({'b': 3, 'a': 2, 'c': 0})

返回高频元素

most_common([n])

返回一个列表,提供 n 个频率最高的元素和计数。 如果没提供 n ,或者是 None,返回计数器中的所有元素。相等个数的元素顺序随机。

>>> c = Counter('lady_killer9')
>>> c
Counter({'l': 3, 'a': 1, 'd': 1, 'y': 1, '_': 1, 'k': 1, 'i': 1, 'e': 1, 'r': 1, '9': 1})
>>> c.most_common(1)
[('l', 3)]

视图

和字典一样

>>> c.keys()
dict_keys(['l', 'a', 'd', 'y', '_', 'k', 'i', 'e', 'r', '9'])
>>> c.values()
dict_values([3, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> c.items()
dict_items([('l', 3), ('a', 1), ('d', 1), ('y', 1), ('_', 1), ('k', 1), ('i', 1), ('e', 1), ('r', 1), ('9', 1)])

求差集

subtract([iterable-or-mapping]),强烈建议使用操作符-,可看函数后面的注意

>>> c = Counter([1,2,3,4])
>>> d = Counter([2,3,5])
>>> c.subtract(d)
>>> c
Counter({1: 1, 4: 1, 2: 0, 3: 0, 5: -1})

函数

c同上

转列表

>>> list(c)
[1, 2, 3, 4, 5]

长度

>>> len(c)
5

注意,如果不想要0和负数,在原本没有0和负数的情况下,使用操作符-来获得差集

>>> Counter([1,2,3,4])-Counter([3,4,5])
Counter({1: 1, 2: 1})
>>> list(Counter([1,2,3,4])-Counter([3,4,5]))
[1, 2]

参考

python官方文档-Counter

练习:

OJ-leetcode找不同(简单统计)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

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

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

打赏作者

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

抵扣说明:

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

余额充值