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实现神经网络感知器算法
Dec 20 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
django celery redis使用具体实践
Apr 08 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
基于python使用tibco ems代码实例
Dec 20 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
Python Http请求json解析库用法解析
Nov 28 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
Python3+Django get/post请求实现教程详解
Feb 16 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
javascript实现2048游戏示例
2014/05/04 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
Python中自定义函数的教程
2015/04/27 Python
python函数装饰器用法实例详解
2015/06/04 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
详解python logging日志传输
2020/07/01 Python
python绘图模块之利用turtle画图
2021/02/12 Python
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
优秀教师先进事迹材料
2014/12/15 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
入党积极分子考察意见
2015/06/02 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
python如何正确使用yield
2021/05/21 Python