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中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
Django模板Templates使用方法详解
Jul 19 Python
python实现文件的分割与合并
Aug 29 Python
django实现模型字段动态choice的操作
Apr 01 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Python list和str互转的实现示例
Nov 16 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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 CKEditor 上传图片实现代码
2009/11/06 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
比较完整的微信开发php代码
2016/08/02 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python3多线程操作简单示例
2018/05/22 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python爬取招聘要求等信息实例
2020/11/20 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
美国眼镜网:GlassesUSA
2017/09/07 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
员工工作表扬信范文
2014/01/13 职场文书
党性分析自查总结
2014/10/14 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
党员示范岗材料
2014/12/19 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书