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中使用dom模块生成XML文件示例
Apr 05 Python
python模块之StringIO使用示例
Apr 08 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Django如何实现上传图片功能
Aug 16 Python
Django配置MySQL数据库的完整步骤
Sep 07 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
在Python中实现字典反转案例
Dec 05 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 生成随机验证码图片代码
2010/02/08 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
php截取字符串函数分享
2015/02/02 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
jquery实现拖动效果
2016/08/10 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
Python实现在线音乐播放器
2017/03/03 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python模拟实现分发扑克牌
2020/04/22 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
.net面试题
2016/09/17 面试题
关于廉洁的广播稿
2014/01/30 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
校庆活动策划方案
2014/06/05 职场文书
会员活动策划方案
2014/08/19 职场文书
Python 阶乘详解
2021/10/05 Python