python Counter计数

# -*- coding: utf-8 -*-

from collections import Counter

# Counter的本质是一个特殊的dict,它继承了dict类,因此它可以完全调用dict所支持的方法。
# 创建空的Counter对象
c1 = Counter()
print(c1['pp'])  # 访问Counter中不存在的元素,输出 0
c2 = Counter('hannah')
print(c2)
c3 = Counter(['python', 'java', 'php', 'kotlin', 'java', 'php'])
print(c3)
# 以dict来创建counter对象
c4 = Counter({'red': 4, 'blue': 2})
print(c4)
# 使用关键字参数的语法创建Counter
c5 = Counter(Python=3, Swift=4)
print(c5)

cnt = Counter()
for word in ['python', 'java', 'php', 'kotlin', 'java', 'php']:
    cnt[word] += 1

print(cnt)
# elements() 返回Counter所包含的全部元素组成的迭代器
print(list(c3.elements()))
# 将字符串(迭代器)转换成Counter
chr_cnt = Counter('abracadabraefg')
# most_common(n) 获取出现最多的n个元素
print(chr_cnt.most_common(3))
c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
# 用Counter对象执行减法,其实就是减少各元素出现的次数
c.subtract(d)
print(c)
e = Counter({'x': 2, 'y': 3, 'z': -4})
# 调用del删除 key-value对,会真正删除该key-value对
del e['y']
print('调用del之后 e元素为:', e)

'''
Counter对象还有一些常用操作,比如把其转换成set(集合)、list(列表)、dict(字典)等。
还可以对Counter执行加、减、并、交运算,对Counter进行求正、求负运算等。
--- 加减并交操作得到的Counter对象小于1的元素都删除 ---
加:将两个Counter对象中各key出现的次数相加,且只保留出现次数为正的元素。
减:将两个Counter对象中各key出现的次数相减,且只保留出现次数为正的元素。
交:取两个Counter对象中 都出现 的key且各key对应的次数的最小数。
并:取两个Counter对象中各key对应的出现次数的最大数。
求正:只保留Counter对象中出现次数为 0或正数 的key-value对
求负:只保留 Counter 对象中出现次数为负数的 key-value 对,并将出现次数改为正数。
'''
c = Counter(Python=5, Swift=1, Kotlin=4, Go=-2)
# 统计Counter中所有出现次数的总和
print(sum(c.values()))
# 将counter转换成list、set,只保留各key
print(list(c))  # ['Python', 'Go', 'Swift', 'Kotlin']
print(set(c))  # {'Python', 'Swift', 'Kotlin', 'Go'}

print(dict(c))  # {'Python': 3, 'Kotlin': 3, 'Swift': 2, 'Go': -2}

# 将Counter转换成list 列表元素为元组(元素,次数)
list_of_pairs = c.items()
print(list_of_pairs)

# 将列表元素为元组(元素,次数)的list转换成Counter
c2 = Counter(dict(list_of_pairs))
print(c2)
# 获取Counter中最少出现的三个元素 most_common获取出现次数最大的 n 个元素     [:-4:-1] 倒数前三
print(c.most_common()[:-4:-1])

# 清空所有的 key-value对
c.clear()
print(c)
c = Counter(a=3, b=1, c=-4)
d = Counter(a=1, b=-2, d=3)

# 加减并交操作得到的Counter对象小于1的元素都删除
print(c + d)  # 最终只保留出现次数为正的元素
# 对Counter执行减法
print(c - d)  # 最终只保留出现次数为正的元素
# 交
print(c & d)  # Counter({'a': 1})
# 并
print(c | d)  # Counter({'a': 3, 'd': 3, 'b': 1})
print(+c)  # Counter({'a': 3, 'b': 1})
print(-d)  # Counter({'b': 2})

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值