python统计序列中元素的出现频度
来源:互联网 发布:2011年流行的网络歌曲 编辑:程序博客网 时间:2024/06/07 20:57
场景1: 某序列[2, 4, 65, 9, 4, 5, 9, …]中,找出出现次数最高的3个元素以及它们出现的次数
场景2:对某英文文章的单词,进行词频统计,找到出现次数最高的10个单词以及它们出现的次数
我们经常会遇到上述场景,实现的方法有多种,这里介绍一下常用的处理方法和几个好用的函数。
找出list出现次数最多的值以及出现的次数
使用列表解析生成30个数字元素的list列表,每个元素范围在0~20之间,这样肯定就会出现重复值的元素:
from random import randintdata = [randint(0,20) for i in range(30)] # [17, 3, 18, 18, 0, 8, 11, 16, 2, 13, 8, 16, 16, 10, 19, 2, 16, 17, 20, 9, 17, 19, 15, 16, 10, 18, 16, 10, 0, 2]
我们希望最终统计结果是一个字典,比如3出现了4次,9出现了2次这样:{3:4, 9:2…}
方法1
我们就用data中的每一个元素作为key(利用key的唯一性),0作为初始值创建字典:
d1 = dict.fromkeys(data, 0)
接下来对列表data进行迭代,每个值都在字典对应的值加1,这样就统计出每个值出现的次数了。
for i in data: d1[i] +=1print(d1) # {0: 0, 2: 0, 3: 0, 8: 0, 9: 0, 10: 0, 11: 0, 13: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0}
接下来我们需要找到出现次数最高的3个元素,实际上就是根据字典的值对字典的项进行排序。
方法2
这里我们使用另外一种专门处理这类问题的方法:使用collections.Counter对象。
将前面创建的list传入Counter构造器,得到Counter对象是元素频度的字典:
from collections import Counterd2 = Counter(data)print(d1[15] == d2[15]) # 验证两种方法中的字典统计的list的15这个值出现的次数是否一样
接着用Counter.most_common(n)方法得到频度最高的n个元素的列表。
这里我们需要找到出现频率最高的3个元素以及出现的次数:
print(d2.most_common(3)) # [(16, 6), (2, 3), (10, 3)]
使用collections.Counter对象,处理这类问题非常简洁清晰,封装了list处理逻辑细节,增强代码的易读性。
对英文文章进行词频统计
这里以一首英文短诗为例,来进行词频统计。
txt = '''If I could save time in a bottlethe first thing that I'd like to dois to save every day until eternity passes awayjust to spend them with youIf I could make days last foreverif words could make wishes come trueI'd save every day like a treasure and thenagain I would spend them with you'''
要对词频进行统计,首先要对词做分割,把每个词取出来,放到一个序列当中。
我们使用正则表达式来进行分割,用非字母字符作为分隔符:
import relist = re.split('\W+', txt) # 大写W表示是非字母字符
这里得到一个单词列表list,我们将list传给前面提到的Counter,得到单词词频的字典d3:
from collections import Counterd3 = Counter(list)
这里我们统计词频最高的10个单词,打印一下:
print(d3.most_common(10)) # [('I', 5), ('save', 3), ('could', 3), ('to', 3), ('If', 2), ('like', 2), ('them', 2), ('make', 2), ('spend', 2), ('every', 2)]
- python统计序列中元素的出现频度
- 统计序列中元素出现的频度
- python 统计序列中元素的出现频度\统计英文文章的词频
- 如何统计序列中元素的出现的频度
- 2-3统计序列中元素出现的频度
- python 2-3 如何统计序列中元素的出现频度--collections.Counter
- <25>python学习笔记——统计序列中元素的出现频度
- Python高级编程-如何统计序列中元素的出现频度?
- python 使用Counter统计列表中元素的频度
- python-如何统计序列中元素的出现频率?
- python统计序列中元素出现的频率
- 统计单词出现的频度
- 统计字符串中各字符出现的频度
- 统计输入字符串中各不同字符出现的频度
- python-2-2-如何统计序列中元素的出现频率?
- python高效编程技巧3(如何统计序列中元素出现的频率)
- Python统计列表中元素出现的次数
- python 统计列表中各元素出现的次数
- Embarcadero的电子邮件
- Java获取不同系统的换行符
- Spring相关jar文件的下载
- linux的configure、glibc
- Iterator hasNext() ,next(),remove()解析
- python统计序列中元素的出现频度
- iOS 程序未启动和在前台、后台接收到推送消息的处理方法
- 如何重置MySQL中表中自增列的初始值
- 最长公共子序列算法
- iOS多线程GCD的总结
- 使用awk批量杀进程的命令
- 文章目录
- 九度OJ-1120:全排列
- ajax POST请求