前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用好collections模块,对李白诗集进行字频统计

用好collections模块,对李白诗集进行字频统计

作者头像
朱卫军 AI Python
发布于 2022-04-03 01:20:10
发布于 2022-04-03 01:20:10
39600
代码可运行
举报
运行总次数:0
代码可运行

1、从一个计数问题开始

初学Python的人很可能会遇到字频统计这样的练习题,那么很容易会想到使用for循环来做。

可是for循环的效率是很低的,而且会涉及到嵌套循环,代码及其冗余。

比如给定一个字符串,对字母进行计数统计:

Python is a popular programming language

一般会这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my_str = "Python is a popular programming language"

def str_count(strs):
    '''对字符串进行字频统计,使用字典的get方法进行判断'''
    str_dict = {}
    for i in strs:
        str_dict[i] = str_dict.get(i,0) + 1
    return str_dict

str_count(my_str)

输出:

这次我们来介绍collection模块中的一个计数方法Counter,用它来计数操作可能只需一行代码。

也由此学习一下Python中的内置模块-collections及它的强大功能。

如果使用Counter计数器来对上面那段字符串进行字频统计,就很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
my_str = "Python is a popular programming language"
Counter(my_str)

输出:

可以看到Counter计数器使用非常简单,只需要传入可迭代对象,就能统计每个元素的出现频次。

如果要对一篇文章,甚至一部小说进行字频统计,该怎么做呢?

以李白诗集为例,任务是统计所有字的频次,并找出出现频次最高的十个字。

这里你不妨先猜猜会有哪些字名列前十,话不多说放代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter

with open('李白.txt') as f:
    # 读取成列表
    c_list = f.readlines()
    
    # 所有诗整合成字符串
    c_str = ','.join(c_list)
    
    # 使用Counter进行字频统计
    c_cnt = Counter(c_str)
    
    # 去除符号、'李''白'等特殊字符
    useless_character = [',',',','。','【','】','\n','李','白']
    for i in useless_character:
        del c_cnt[i]
        
    # 使用most_common方法提取频次最高的前10字符
    c_top_10 = c_cnt.most_common(10)
    
    # 打印
    print(c_cnt)
    print(c_top_10)

输出:

出现频次最高的前十个字:

你猜中了几个呢?

2、聊聊Counter具体用法

collections是一个容器模块,来提供Python标准内建容器 dict、list、set、tuple 的替代选择。

也就是说collections模块是作为Python内建容器的补充,在很多方面它用起来更加有效率。

Counter是字典的子类,用于计数可哈希对象。

计数元素像字典键(key)一样存储,它们的计数存储为值。

所以说Counter对象可以使用字典的所有方法。

创建Counter对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
 # 创建了一个空的Counter对象
c = Counter()
# 用可迭代对象创建了一个Counter对象
c = Counter('gallahad')
 # 用映射来创建一个Counter
c = Counter({'red': 4, 'blue': 2})
#用关键字参数创建Counter
c = Counter(cats=4, dogs=8)

对可迭代对象进行计数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
c
# 输出:Counter({'b': 1, 'a': 3, 'n': 2, 's': 1})

根据键引用值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
c['a']
# 输出:3

如果不存在该键,则返回0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
c['u']
# 输出:0

删除其中一个键值对

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
del c['a']
c
# 输出:Counter({'b': 1, 'n': 2, 's': 1})

用映射来创建一个Counter,并返回迭代器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter({'red': 3, 'blue': 1,'black':2})
list(c.elements())
# 输出:['red', 'red', 'red', 'blue', 'black', 'black']

查看出现频次最高的前n元素及其次数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('absabasdvdsavssaffsdaws')
c.most_common(3)
# 输出:[('s', 7), ('a', 6), ('d', 3)]

两个Counter相减

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter(a=4, b=2, c=0)
d = Counter(a=1, b=2, c=3)
c.subtract(d)
c
# 输入:Counter({'a': 3, 'b': 0, 'c': -3})

转换成字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
dict(c)
# 输出:{'b': 1, 'a': 3, 'n': 2, 's': 1}

添加可迭代对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import Counter
c = Counter('bananas')
c.update('apples')
c
# 输出:Counter({'b': 1, 'a': 4, 'n': 2, 's': 2, 'p': 2, 'l': 1, 'e': 1})

3、总结

Counter是字典的一个子类,它继承了字典的所有方法。

Counter作为计数器,使用简单高效。

键代表计数元素,值代表计数值。

most_common()方法用于排序,选取频次前n的键值对。

Counter对象可以进行加减运算及逻辑运算操作。

注:后台回复:李白,可获取示例txt文档

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jQuery
    2.jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“
changxin7
2022/05/06
9K0
jQuery
ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
前言 为了符合后面更新后的重构系统,本文于2016-10-31日修正一些截图,文字 我们有了一系列的解决方案,我们将动手搭建新系统吧。 后台系统没有多大的UI视觉,这次我们采用的是标准的左右分栏,左边是系统菜单,右边是一个以tabs页组成的页面集合,每一个tab都可以单独刷新和关闭 开发工具 Visual Studio 2012(以上) 开始搭建 打开我们熟悉的VS创建一个空解决方案。我起了个名字叫Apps,类库命名空间将与Apps开头 如Apps.BLL,Apps.Web等命名 1. 新建MVC5.
用户1149182
2018/01/16
2.3K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
jquery tab选型卡
*{ margin:0; padding:0;} body { font:12px/19px Arial, Helvetica, sans-serif; color:#666;} .tab { width:240px;margin:50px;} .tab_menu { clear:both;} .tab_menu li { float:left; text-align:center; cursor:pointer; list-style:none; padding:1px 6px; margin-right:4px; background:#F1F1F1; border:1px solid #898989; border-bottom:none;} .tab_menu li.hover { background:#DFDFDF;} .tab_menu li.selected { color:#FFF; background:#6D84B4;} .tab_box { clear:both; border:1px solid #898989; height:100px;} .hide{display:none}
用户5760343
2019/10/10
1.7K0
jquery tab选型卡
Web前端JQuery入门实战案例
快速的,轻量级的,功能丰富的 js 库。动画(animation),ajax,DOM,更简单,容易使用的api。
达达前端
2019/07/03
4K0
jQuery基础--CSS操作、class操作、attr操作、prop操作
1.1.1 css操作 功能:设置或者修改样式,操作的是style属性。 设置单个样式 //name:需要设置的样式名称 //value:对应的样式值 css(name, value); //使用案例 $("#one").css("background","gray");//将背景色修改为灰色 设置多个样式 //参数是一个对象,对象中包含了需要设置的样式名和样式值 css(obj); //使用案例 $("#one").css({ "background":"gray",
eadela
2019/09/29
1.1K0
jQuery基础--CSS操作、class操作、attr操作、prop操作
jQuery
jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQuery作为他们的官方库。
py3study
2020/01/16
4K0
【Jquery练习】tab栏切换
在实现今天的练习之前,我们先来了解一下排他思想,排他思想也就是为当前元素设置一个特定的样式,并为其他兄弟元素清除样式。多用于多选一的效果。
颜颜yan_
2022/12/01
6K0
【Jquery练习】tab栏切换
jquery实现tab切换完整代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120769.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/15
5.1K0
前端基础:jQuery
jQuery 能做的 JavaScript 也都能做,但使用 jQuery 能大幅提高开发效率
RendaZhang
2020/09/08
13.6K0
前端基础:jQuery
jQuery
jQuery基础 1、    jQuery其实就是一个类库,集成了DOM/BOM/JavaScript的类库 http://jquery.cuishifeng.cn/这个网站里有所有的jQuery
coders
2018/01/04
4.6K0
jQuery
手动实现jQuery Tools里面tab功能
平时开发中用的Javascript类库都是jQuery,用到插件或者第三方类库能从jQuery Tools里面找到,基本不用其他的。当然有时同事喜欢使用jQuery UI里面的插件。并且jQuery Tools里面的插件和jQuery UI里面的插件还会出现冲突。这个事情就不舒服了。不过基本开发之前就确定好用哪个类库,免得后期开发中因为冲突的增加,增加项目的开发周期和开发成本。当然如果你掌握好jQuery Tools里面的插件,有些功能和效果很快就开发好了。之前一个项目,就只使用了jQuery Tools里
八哥
2018/01/18
1.5K0
手动实现jQuery Tools里面tab功能
「jQuery」基础 - 01
请注意,本文编写于 2075 天前,最后修改于 173 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
7K0
「jQuery」基础 - 01
jQuery基础
使用jQuery快速高效制作网页交互特效 第一章-JavaScript基础 上机练习1 练习——统计包含“a”或“A”的字符串的个数 需求说明:使用数组存储一组字符串,并统计包含“a”或“A”的字符串的个数 关键代码: <script type="text/javascript"> var a = ["America","Greece","Britain","Canada","China","Egypt"]; var count = 0; for(var i in a) {
星辰xc
2022/04/09
7.5K0
jQuery基础
jQuery
ps:.offset()方法允许我们检索一个元素相对于文档(document)的当前位置,和 .position()的差别在于: .position()是相对于相对于父级元素的位移;
HammerZe
2022/03/25
6.8K0
jQuery
Web阶段:第五章:JQuery库
点击:API文档下载 Jquery介绍 1.什么是JQuery ? jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库。 2.JQue
Java廖志伟
2022/09/28
26.4K0
Web阶段:第五章:JQuery库
jQuery选择器 和用jQuery 实现 Tab 切换效果(1)
通过类数组下标的获取方式或者get方法获取指定index的DOM对象,也就是我们说的jQuery对象转DOM对象
bamboo
2019/01/29
3.8K0
jQuery选择器 和用jQuery 实现 Tab 切换效果(1)
jQuery基础
一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。 [2]   jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE! [3]  它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 [4]  jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdo
用户1214487
2018/01/24
2.1K0
jQuery基础系列
jquery的入口函数是在html所有标签都加载后才执行,而JavaScript的window.onload事件是等到所有内容加载完后才执行。
达达前端
2019/07/03
2.6K0
jQuery基础系列
04 . 前端之JQuery
JQuery简介 # 1. jQuery是一个轻量级的、兼容多浏览器的JavaScript库。 # 2. jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便
iginkgo18
2020/09/27
3.5K0
一些经典案例
案例一:(实现效果,鼠标移动到哪个菜单上,哪个菜单会显示二级菜单,移开会收回。) 案例二:tab栏(选项卡) 鼠标滑过,显示对应的特殊样式,下面的内容替换为需要的内容。 和无缝滚动一样是专有名词。 e
小闫同学啊
2019/07/18
8830
一些经典案例
相关推荐
jQuery
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验