python数据结构-如何统计序列中元素的频度

本文介绍如何使用Python统计序列中元素的频度,包括使用字典、堆排序和collections.Counter对象的方法,以及如何统计英文文章中词频最高的单词。

如何统计序列中元素的频度

问题举例

如何找出随机序列[1, 5, 6, 5, 3, 2, 1, 0, 6, 1, 6]中出现频度最高的3个元素?

如何统计某篇英文文章中词频最高的5个单词?

 

将序列转换成字典(元素:频度),根据字典的值进行排序

列表

from random import randint
list1 = [randint(0, 10) for _ in range(30)]
print(list1)
dict1 =  dict.fromkeys(list1, 0)
for item in list1:
    dict1[item] += 1

#list comprehensions
dict_res1 = sorted([(v, k) for k, v in dict1.items()], reverse=True)[:3]
print(dict_res1)

#generator comprehensions
dict_res2 = sorted(((v, k) for k, v in dict1.items()), reverse=True)[:3]
print(dict_res2)

分析:使用生成器解析比列表解析节省空间

   当一个列表很大时,我们只需要找到出现频度最高的3个元素,如果我们对整个列表都进行排序,

   这样显然是很浪费的,一般这种情况我们会使用堆排序

 

堆排序

from random import randint
import heapq

list1 = [randint(0, 10) for _ in range(30)]
print(list1)
dict1 =  dict.fromkeys(list1, 0)
for item in list1:
    dict1[item] += 1

res = heapq.nlargest(3, ((v, k) for k, v in dict1.items()))
print(res)

 

使用collections中的Counter对象

from random import randint
from collections import Counter

list1 = [randint(0, 10) for _ in range(30)]
print(list1)
dict1 =  dict.fromkeys(list1, 0)
for item in list1:
    dict1[item] += 1

counter1 = Counter(dict1)
res = counter1.most_common(3)
print(res)

 

词频统计栗子

import re
from collections import Counter

txt = open('note.txt').read()
word_list = re.split('\W+', txt)

counter1 = Counter(word_list)
res = counter1.most_common(3)
print(res)

 

参考资料:python3实用编程技巧进阶

转载于:https://www.cnblogs.com/marton/p/10744095.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值