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 相关文章推荐
在django中使用自定义标签实现分页功能
Jul 04 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Python中Proxypool库的安装与配置
Oct 19 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python判断链表是否有环的实例代码
Jan 31 Python
Django models filter筛选条件详解
Mar 16 Python
详解python中的异常捕获
Dec 15 Python
Python+Appium实现自动抢微信红包
May 21 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 yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
python3对接mysql数据库实例详解
2019/04/30 Python
详解Python传入参数的几种方法
2019/05/16 Python
python对常见数据类型的遍历解析
2019/08/27 Python
Python 音频生成器的实现示例
2019/12/24 Python
Python如何发送与接收大型数组
2020/08/07 Python
.net面试题
2015/12/22 面试题
会计专业自荐信
2014/06/03 职场文书
金融专业求职信
2014/08/05 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python
Python Django模型详解
2021/10/05 Python
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB
nginx共享内存的机制详解
2022/03/21 Servers
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android
Java完整实现记事本代码
2022/06/16 Java/Android