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 相关文章推荐
Python浅复制中对象生存周期实例分析
Apr 02 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
Django密码系统实现过程详解
Jul 19 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Python如何实现爬取B站视频
May 20 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
基于Python正确读取资源文件
Sep 14 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
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
Python实现手写一个类似django的web框架示例
2018/07/20 Python
Flask之flask-script模块使用
2018/07/26 Python
Random 在 Python 中的使用方法
2018/08/09 Python
使用python3实现操作串口详解
2019/01/01 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
上班看电影检讨书
2014/02/12 职场文书
党委班子剖析材料
2014/08/21 职场文书
《颐和园》教学反思
2016/02/19 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
python中filter,map,reduce的作用
2022/06/10 Python