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如何获取服务器硬件信息
May 11 Python
详解Python pygame安装过程笔记
Jun 05 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
python处理csv中的空值方法
Jun 22 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Python面向对象程序设计示例小结
Jan 30 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
python blinker 信号库
May 04 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
js jquery数组介绍
2012/07/15 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
require.js的用法详解
2015/10/20 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
幼儿园教师教学反思
2014/02/06 职场文书
教师党员承诺书
2014/03/25 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
创业计划书之甜品店
2019/09/18 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
redis中lua脚本使用教程
2021/11/01 Redis