Python 统计字数的思路详解


Posted in Python onMay 08, 2018

 问题描述:

用 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 统计字数的思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python3编写C/S网络程序实例教程
Aug 25 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
Django web框架使用url path name详解
Apr 29 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
python Django的web开发实例(入门)
Jul 31 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
Python bisect模块原理及常见实例
Jun 17 Python
python 实现简单的计算器(gui界面)
Nov 11 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 #Python
Django学习教程之静态文件的调用详解
May 08 #Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 #Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 #Python
Python读写docx文件的方法
May 08 #Python
python docx 中文字体设置的操作方法
May 08 #Python
Python解析并读取PDF文件内容的方法
May 08 #Python
You might like
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
jQuery find和children方法使用
2011/01/31 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Numpy数组的广播机制的实现
2020/11/03 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
会计专业导师推荐信
2014/03/08 职场文书
小学教师寄语大全
2014/04/03 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
Python实现排序方法常见的四种
2021/07/15 Python