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 Queue模块详解
Nov 30 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
使用python对excle和json互相转换的示例
Oct 23 Python
使用pip安装python库的多种方式
Jul 31 Python
python分别打包出32位和64位应用程序
Feb 18 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
selenium自动化测试入门实战
Dec 21 Python
使用Python实现音频双通道分离
Dec 25 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
python用tkinter开发的扫雷游戏
Jun 01 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开启openssl的方法
2014/05/15 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
Jquery 实现table样式的设定
2015/01/28 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
举例详解Python中的split()函数的使用方法
2015/04/07 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
django 常用orm操作详解
2017/09/13 Python
python数据归一化及三种方法详解
2019/08/06 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
python实现批量转换图片为黑白
2020/06/16 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
周一问候语大全
2015/11/10 职场文书