Python 统计字数的思路详解
作者:云腾 发布时间:2023-01-29 00:17:44
问题描述:
用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率最高的单词。返回值是一个元组列表,包含出现次数最高的 n 个单词及其次数,即 [(<单词1>, <次数1>), (<单词2>, <次数2>), ... ],按出现次数降序排列。
您可以假设所有输入都是小写形式,并且不含标点符号或其他字符(只包含字母和单个空格)。如果出现次数相同,则按字母顺序排列。
例如:
print count_words("betty bought a bit of butter but the butter was bitter",3)
输出:
[('butter', 2), ('a', 1), ('betty', 1)]
解决问题的思路:
1. 将字符串s进行空白符分割得到所有的单词列表split_s,如:['betty', 'bought', 'a', 'bit', 'of', 'butter', 'but', 'the', 'butter', 'was', 'bitter']
2. 建立maplist,将split_s转化为元素为元组的列表形式,如:[('betty', 1), ('bought', 1), ('a', 1), ('bit', 1), ('of', 1), ('butter', 1), ('but', 1), ('the', 1), ('butter', 1), ('was', 1), ('bitter', 1)]
3. 合并maplist中元素,元组的第一个索引值相同,则将其第二个索引值相加。
// 备注:准备采用defaultdict。得到的数据如下:{'betty': 1, 'bought': 1, 'a': 1, 'bit': 1, 'of': 1, 'butter': 2, 'but': 1, 'the': 1, 'was': 1, 'bitter': 1}
4. 进行排序,按照key进行字母排序,得到如下:[('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1), ('bought', 1), ('but', 1), ('butter', 2), ('of', 1), ('the', 1), ('was', 1)]
5. 进行二次排序, 按照value进行排序,得到如下:[('butter', 2), ('a', 1), ('betty', 1), ('bit', 1), ('bitter', 1), ('bought', 1), ('but', 1), ('of', 1), ('the', 1), ('was', 1)]
6. 使用切片取出频率较高的*组数据
总结:在python3上不进行defaultdict进行排序结果也是正确的,python2上不正确。defaultdict本身是没有顺序的,要区分列表,所以必须进行排序。
也可尝试自己写,不借助第三方模块
解决方案1(使用defaultdict):
from collections import defaultdict
"""Count words."""
def count_words(s, n):
"""Return the n most frequently occuring words in s."""
split_s = s.split()
map_list = [(k,1) for k in split_s]
output = defaultdict(int)
for d in map_list:
output[d[0]] += d[1]
output1 = dict(output)
top_n = sorted(output1.items(), key=lambda pair:pair[0], reverse=False)
top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
return top_n[:n]
def test_run():
"""Test count_words() with some inputs."""
print(count_words("cat bat mat cat bat cat", 3))
print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
test_run()
解决方案2(使用Counter)
from collections import Counter
"""Count words."""
def count_words(s, n):
"""Return the n most frequently occuring words in s."""
split_s = s.split()
split_s = Counter(name for name in split_s)
print(split_s)
top_n = sorted(split_s.items(), key=lambda pair:pair[0], reverse=False)
print(top_n)
top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
print(top_n)
return top_n[:n]
def test_run():
"""Test count_words() with some inputs."""
print(count_words("cat bat mat cat bat cat", 3))
print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
test_run()
总结
以上所述是小编给大家介绍的Python 统计字数的思路详解网站的支持!
来源:https://www.cnblogs.com/yongqiangyue/archive/2018/05/08/9006862.html


猜你喜欢
- Python装饰器用法Python的装饰器是个好东西,它能干很多事情。但对于新手,它看起来似乎没那么简单。但事实上,装饰器本身也只是个函数。
- 1998年,W3C发布HTML 4.0 Specification,里面清清楚楚的写了每个标签的用法和语义。搜索引擎的算法参考了W3C的语义
- 第一种,在方法后面加问号,然后执行,如 abs?第二种,光标移动到方法上面,按shift+tab,弹出文档,连续按选择文档详细程度补充知识:
- Web 标准要求一览表Russ WeakleyJjgod Jiang14-Aug-2004目录1 Web 标准,不仅仅是“不用表格的站点”2
- 看到网上一片文章,自己式了一下,果然 XMLTextReader速度要快!在.NET框架的System.XML名称空间中包含的XMLText
- 如果你忘记了你的MYSQL的root口令的话,你可以通过下面的过程恢复。 1. 向mysqld
- 本文实例讲述了python中@property和property函数常见使用方法。分享给大家供大家参考,具体如下:1、基本的@propert
- 最近接了个项目,其中有需求是要实现摇一摇红包功能,在网上搜了好久,都没有找到源码,没办法,只有自动写了,下面小编把我的劳动成果分享给大家供大
- 概述名称描述NOT REGEXP否定的REGEXPREGEXP字符串是否匹配正则表达式RLIKE字符串是否匹配正则表达式正则表达式是指定复杂
- 写models.py时缺少了一个 verbose_name,导致数据库出现问题,整了很久,摸索出重新建立数据库的方法:首先删除每个app中的
- 其实很简单,一般的数组去重可以直接用 new Set() 方法即可,但是数组对象的话,比较复杂,不能直接用,我们可以采取间接的方法来去重un
- 两个跳转语法第一个参数是请求路径,第二个参数是http状态码。c.Redirect("/login",400) &nbs
- 前言:通常我们创建类都是使用class 类名,但是小伙伴们有没有想过,类是由谁来创建的呢,python中常说的万物皆对象,对象是由类创建的,
- 在python中,用于数组拼接的主要来自numpy包,当然pandas包也可以完成。而,numpy中可以使用append和concatena
- 需求目标执行Python程序的时候在控制台输出内容的时候只显示一行,然后自动刷新内容,像这样:Downloading File FooFil
- 本文实例为大家分享了python将两个txt文件内容合并的具体代码,供大家参考,具体内容如下分析: 先分别将两个文件中的内容读入列表中,再将
- 1、python装饰器刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜
- 前些天写一个存储过程,存储过程中使用了事务,后来我把一些代码注释掉来进行调试找错,突然发现一张表被锁住了,原来是创建事务的代码忘记注释掉。本
- 今天用Python提取了Linux内核源代码的目录树结构,没有怎么写过脚本程序,我居然折腾了2个小时,先是如何枚举出给定目录下的所有文件和文
- 啥是JWTJWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端