python【3】-统计序列中元素出现的次数(频度)
案例
1. 统计列表中[1,1,2,22,3,3,-2,3,-34]出现次数最高的元素,并统计出现的次数
2 统计英文文章中单词的频度。
对于问题1 :
首先生成随机列表
from random import randint
l1=[randint(-10,10) for x in range(30)]
print(l1)
统计列表中元素出现的次数 比如 数字1 出现3次 就记录为1:3 很自然的想到使用字典来存储。即:
方法1:
把列表 l1 作为键,把出现的次数作为值 ,传入字典 。 使用字典的fromkeys方法 。这是fromkeys的菜鸟教程链接
http://www.runoob.com/python/att-dictionary-fromkeys.html
dict.fromkeys(l1,0) 。把需要统计的序列(l1)作为第一个参数传入fromkeys,0 作为初始值,
使用循环遍历,每找个一个元素,就在这个元素的值后面加1 即:
from random import randint
l1=[randint(-10,10) for x in range(30)]
print(l1)
c=dict.fromkeys(l1,0)
for one in l1:
c[one]+=1
print(c)
输出结果为 :
而在方法1中,只是得到了每一个元素出现的次数,并没有得到初选次数最多的3个元素,那么该如何做呢?
一 。根据字典中的值对字典的键进行排序,请看这篇笔记 :按照字典的值对字典进行排序
方法2:专门处理计数问题的方法 。使用collections.Counter方法。首先导入collections类
使用Counter的most_common()方法。
导入Counter,将生产的随机列表作为参数传入到Counter构造器中,会得到一个这样的结果,对结果使用most_common()得到出现次数前几的元素
Counter({-8: 4, -2: 4, -1: 3, -4: 3, 2: 2, 4: 2, 7: 2, -9: 2, 0: 1, 3: 1, 5: 1, 6: 1, 9: 1, 10: 1, -10: 1, -7: 1})
from collections import Counter
l2=Counter(l1)
print(l2.most_common(3))
代码输出:
对于问题2 统计英文单词的词频
需要使用re模块 里面的正则表达式 impor re
import re
with open(r'D:\software\Notepad++\readme.txt','r') as file: #打开文件 统计readme.txt中的单词词频
txt=file.read() #把文件读取的内容变成字符串 ,因为re,split 方法的参数接受的是字符串 而不是列表
l3=re.split('\W+',txt) # \W+是把字符串按照非字母的来分隔
l4=Counter(l3)
print(l4.most_common(10))
结果如下: