栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

儿童python教程221:Python Counter类用法完全攻略

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

儿童python教程221:Python Counter类用法完全攻略



collections 包下的 Counter 也是一个很有用的工具类,它可以自动统计容器中各元素出现的次数。

Counter 的本质就是一个特殊的 dict,只不过它的 key 都是其所包含的元素,而它的 value 则记录了该 key 出现的次数。因此,如果通过 Counter 并不存在的 key 访问 value,将会输出 0(代表该 key 出现了 0 次)。

程序可通过任何可法代对象参数来创建 Counter 对象,此时 Counter 将会自动统计各元素出现的次数,并以元素为 key,出现的次数为 value 来构建 Counter 对象;程序也能以 dict 为参数来构建 Counter 对象;还能通过关键字参数来构建 Counter 对象。例如如下程序:

from collections import Counter

# 创建空的Counter对象

c1 = Counter()

# 以可迭代对象创建Counter对象

c2 = Counter('hannah')

print(c2)

# 以可迭代对象创建Counter对象

c3 = Counter(['Python', 'Swift', 'Swift', 'Python', 'Kotlin', 'Python'])

print(c3)

# 以dict来创建Counter对象

c4 = Counter({'red': 4, 'blue': 2})

print(c4)

# 使用关键字参数的语法创建Counter

c5 = Counter(Python=4, Swift=8)

print(c5)
运行上面程序,可以看到如下输出结果:

Counter({'h': 2, 'a': 2, 'n': 2})
Counter({'Python': 3, 'Swift': 2, 'Kotlin': 1})
Counter({'red': 4, 'blue': 2})
Counter({'Swift': 8, 'Python': 4})

事实上,Counter 继承了 dict 类,因此它完全可以调用 dict 所支持的方法。此外,Counter 还提供了如下三个常用的方法:
  • elements():该方法返回该 Counter 所包含的全部元素组成的迭代器。
  • most_common([n]):该方法返回 Counter 中出现**多的 n 个元素。
  • subtract([iterable-or-mapping]):该方法计算 Counter 的减法,其实就是计算减去之后各元素出现的次数。

下面程序示范了 Counter 类中这些方法的用法示例:

from collections import Counter

# 创建Counter对象

cnt = Counter()

# 访问并不存在的key,将输出该key的次数为0.

print(cnt['Python']) # 0

for word in ['Swift', 'Python', 'Kotlin', 'Kotlin', 'Swift', 'Go']:

    cnt[word] += 1

print(cnt)

# 只访问Counter对象的元素

print(list(cnt.elements()))

# 将字符串(迭代器)转换成Counter

chr_cnt = Counter('abracadabra')

# 获取出现**多的3个字母

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

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) # Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

e = Counter({'x': 2, 'y': 3, 'z': -4})

# 调用del删除key-value对,会真正删除该key-value对

del e['y']

print(e)

# 访问'w'对应的value,'w'没有出现过,因此返回0

print(e['w']) # 0

# 删除e['w'],删除该key-value对

del e['w']

# 再次访问'w'对应的value,'w'还是没有,因此返回0

print(e['w']) # 0
上面程序中第 10 行代码调用了 Counter 对象的 elements() 方法,该方法返回容器中所有元素组成的迭代器,Counter 记录了几个元素的出现次数,该方法就会返回几个对应的元素。

程序中第 14 行代码调用了 Counter 对象的 most_common(3) 方法,该方法会返回容器中出现次数**多的三个元素。

程序中第 18 行代码调用了 Counter 对象的 subtract() 方法执行减法,实质上就是对元素出现的次数执行减法。

运行上面代码,可以看到如下输出结果:

0
Counter({'Swift': 2, 'Kotlin': 2, 'Python': 1, 'Go': 1})
['Swift', 'Swift', 'Python', 'Kotlin', 'Kotlin', 'Go']
[('a', 5), ('b', 2), ('r', 2)]
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
Counter({'x': 2, 'z': -4})
0
0

此外,对于 Counter 对象还有一些很常用的操作,比如把 Counter 对象转换成 set(集合)、list(列表)、dict(字典)等,程序还可对 Counter 执行加、减、交、并运算,对 Counter 进行求正、求负运算等。对 Counter 执行各种运算的含义如下:
  • 加:将两个 Counter 对象中各 key 出现的次数相加,且只保留出现次数为正的元素。
  • 减:将两个 Counter 对象中各 key 出现的次数相喊,且只保留出现次数为正的元素。
  • 交:取两个 Counter 对象中都出现的 key 且各 key 对应的次数的**小数。
  • 并:取两个 Counter 对象中各 key 对应的出现次数的**大数。
  • 求正:只保留 Counter 对象中出现次数为 0 或正数的 key-value 对。
  • 求负:只保留 Counter 对象中出现次数为负数的 key-value 对,并将出现次数改为正数。

下面程序示范了对 Counter 对象进行的这些常用操作:

from collections import Counter

# 创建Counter对象

c = Counter(Python=4, Swift=2, Kotlin=3, Go=-2)

# 统计Counter中所有出现次数的总和

print(sum(c.values())) # 7

# 将Counter转换为list,只保留各key

print(list(c)) # ['Python', 'Swift', 'Kotlin', 'Go']

# 将Counter转换为set,只保留各key

print(set(c)) # {'Go', 'Python', 'Swift', 'Kotlin'}

# 将Counter转换为dict

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

# 将Counter转换为list,列表元素都是(元素, 出现次数)组

list_of_pairs = c.items()

print(list_of_pairs) # dict_items([('Python', 4), ('Swift', 2), ('Kotlin', 3), ('Go', -2)])

# 将列表元素为(元素, 出现次数)组的list转换成Counter

c2 = Counter(dict(list_of_pairs))

print(c2) # Counter({'Python': 4, 'Kotlin': 3, 'Swift': 2, 'Go': -2})

# 获取Counter中**少出现的3个元素

print(c.most_common()[:-4:-1]) # [('Go', -2), ('Swift', 2), ('Kotlin', 3)]

# 清空所有key-value对

c.clear()

print(c) # Counter()

c = Counter(a=3, b=1, c=-1)

d = Counter(a=1, b=-2, d=3)

# 对Counter执行加法

print(c + d)  # Counter({'a': 4, 'd': 3})

# 对Counter执行减法

print(c - d)  # Counter({'b': 3, 'a': 2})

Counter({'a': 2})

# 对Counter执行交运算

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})
上面程序演示了前面介绍的 Counter 的各种通用方法和运算符,并且还给出了每次运算的输出结果,读者可通过这些输出结果来理解 Counter 对象的方法和运算符的功能。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/805909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号