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小程序
Aug 15 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
Python接收手机短信的代码整理
Aug 02 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 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缓存类完整实例
2014/07/26 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
Javascript面向对象编程
2012/03/18 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
数控技术专业推荐信
2013/11/01 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
罚站检讨书
2015/01/29 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
七年级上册生物的课件
2019/08/07 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python