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函数中的函数(闭包)用法实例
Mar 15 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python实现的弹球小游戏示例
Aug 01 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
python操作oracle的完整教程分享
Jan 30 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python 经典算法100及解析(小结)
Sep 13 Python
基于python监控程序是否关闭
Jan 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中随机显示图片的函数代码
2011/06/23 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
js判断浏览器是否支持html5
2014/08/17 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
用python代码做configure文件
2014/07/20 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python 经典数字滤波实例
2019/12/16 Python
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
计算机操作自荐信
2013/12/07 职场文书
心理健康教育制度
2014/01/27 职场文书
善意的谎言事例
2014/02/15 职场文书
财务管理专业自荐书
2014/09/02 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
罚站检讨书
2015/01/29 职场文书
会议通知格式范文
2015/04/15 职场文书
证婚人致辞精选
2015/07/28 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
Python道路车道线检测的实现
2021/06/27 Python