利用Python3实现统计大量单词中各字母出现的次数和频率的方法
作者:firm_mabu 发布时间:2022-04-18 09:29:50
首先以只读方式打开单词文件,利用列表推导式创建两个列表
列表sta记录各单词出现的次数,列表freq记录各单词出现的频率
f = open('5500词.txt','r',encoding='utf-8')
sta = [0 for i in range(26)]
freq = [0 for i in range(26)]
单词格式如下所示:
a [ei] art.一(个);每一(个);(同类事物中)任一个
abandon [ə'bændən] vt.离弃,丢弃;遗弃,抛弃;放弃
abdomen [æb'dəumen] n.腹,下腹(胸部到腿部的部分)
abatement [ə'beitmənt] n.减(免)税,打折扣,冲销
abide [ə'baid] vi.(abode,abided)(by)遵守;坚持;vt.忍受,容忍
每行一个单词,所以我们选择按行读取文件
for i in range(5500):
buf = f.readline()
然后依次统计每个字符串中的字母个数,注意大写字母也要统计(后面的字母省略)
for j in buf:
if j == 'a' or j == 'A':
sta[0] = sta[0] + 1
elif j == 'b' or j == 'B':
sta[1] = sta[1] + 1
注意到每个单词后都有音标,所以遇到 中括号" [ "时停止计数
if j == '[':
break
然后每五个一行,依次输出各个单词出现的次数,将print函数中的end参数由默认换行改成几个空格,使输出更格式化。字母利用ASCII码输出
print('5498个词汇中,各字母出现的次数分别为:\n')
asc = 97
for i in range(26):
if i < 25:
print("%c" % asc,':',sta[i],end=' ')
if (i + 1) % 5 == 0:
print('\n')
else:
print("%c" % asc,':',sta[i])
asc = asc + 1
利用一个for遍历计算出所有字母数量的总和
sum = 0
for i in sta:
sum = sum + i
利用一个for遍历计算出各字母出现的频率,注意到Python中计算出的频率会自动保留17位小数,为了方便查看,使用round()函数保留四位小数,值得注意的是,使用round()函数会自动去掉数字末尾的0
for i in range(26):
freq[i] = round(sta[i] / sum,4)
再以每五个一行,依次输出各个单词出现的频率,将print函数中的end参数由默认换行改成几个空格,使输出更格式化。字母利用ASCII码输出。
print('各字母出现的频率分别为:\n')
for i in range(26):
if i < 25:
print("%c" % asc,':',freq[i],end=' ')
if (i + 1) % 5 == 0:
print('\n')
else:
print("%c" % asc,':',freq[i])
asc = asc + 1
最后输出的结果如下图所示:
上概率论的课时,偶然看见居然有人拿着词典去数字母的数量,就想能不能写一个自动统计的程序,于是就随便写着玩。代码功底很差,所以写得很丑(居然有25个elif),所以看个乐呵就好了。
总的来说,我觉得有这些可以改进的地方:
①读取单词的方法可以改进,这种一行一行读取的方式,对格式要求很高,很难找到
②用字典来存储频数和频率是否会更好?后面输出的时候可以避免使用ASCII码,但是字典推导式我属实记不清了
③判断计数的这些if和elif能否抽象出一个方法?增加代码复用
④round()函数会自动去掉小数后面的0,有没有什么方法使0被保留下来?这样输出的格式会更好看
我的代码的优点估计只有一点了:
①Python初学者就能看懂
来源:https://blog.csdn.net/firm_mabu/article/details/114420702


猜你喜欢
- Python与星球大战背后的工业光魔提起Python语言,很多人会想起系统运维、Web开发等工作。很少有人会知道Python也能够用于电影视
- 谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类。下载链接: https
- innerHTML 属性的使用非常流行,因为他提供了简单的方法完全替代一个 HTML 元素的内容。另外一个方法是使用 DOM Level 2
- 通过 1至10 阶来拟合对比 均方误差及R评分,可以确定最优的“最大阶数”。import numpy as npimport matplot
- 前言最近因为工作需要要使用PHP 7,所以从网上找教程进行安装, 结果编译没问题, 安装的时候报了错误。错误如下cp -pR -f phar
- 关于admin:(1) admin的概述:admin是一个django子代的组件,当创建一个项目会后,就会在settings文件的 INST
- 信息架构的组件可以拆分成四类组织系统 如何组织信息,例如,依据主题或年代顺序。标签系统 如何表示信息,例如,科学术语(“Acer”)或通俗术
- 本文实例讲述了python操作mongodb根据_id查询数据的实现方法。分享给大家供大家参考。具体分析如下:_id是mongodb自动生成
- 这个翻滚代码没有使用什么marquee或者其它位移方法,而是每隔一秒把列表最顶端的那个li删掉,把这个li里面的内容插入到最底端新生成的li
- 在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到。有些小伙伴会提出可以保存网页链接
- 最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短。首先我们做一个定时或者实时脚本timedtask.p
- 学习目的:掌握下拉列表框的用法,并理解AutoPostBack属性; 理解IsPoskBack及用法; 初识DataTable的
- VueUse官方链接一、什么是VueUseVueUse不是Vue.use,它是为Vue 2和3服务的一套Vue Composition AP
- 目录1、分布式事务2、SAGA3、SAGA 实践4、处理网络异常5、处理回滚6、小结银行跨行转账业务是一个典型分布式事务场景,假设 A 需要
- 本文实例讲述了wxPython主框架的简单用法,分享给大家供大家参考。具体如下:程序代码如下:import wx class MyApp(w
- 一.Array在Go语言中,数组是一个值类型(value type)所有的值类型变量在赋值和作为参数传递时都将产生一个复制动作如果作为函数的
- 双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节
- 在python中利用numpy创建一个array, 然后我们想获取array的最大值,最小值。可以使用一下方法:一、创建数组这样就可以获得一
- 见下面的代码:<html><head><title>精彩春风之月份查询</title><
- 今天突然想起这个问题, 就好好搜索整理一下,不过在开始归纳之前,请先来一起做做这个小实验:忽略一切实际的外在情况, 你看了下面的按钮,第一本