如何统计出元素出现的频度

思路:先算出随机序列中每个元素出现的次数,再根据次数进行排序,取前3个。
 
创建随机序列data
In [4]: data = [randint(0,20) for _ in xrange(30)]
 
In [5]: data
Out[5]:
[9,
 5,
 13,
 2,
 11,
 1,
 1,
 3,
 13,
 20,
 18,
 18,
 9,
 19,
 16,
 11,
 14,
 16,
 13,
 11,
 5,
 8,
 8,
 19,
 19,
 17,
 14,
 17,
 12,
 12]
 
创建一个字典c将随机序列的元素设为键,0设为值
In [6]: c = dict.fromkeys(data,0)
 
In [7]: c
Out[7]:
{1: 0,
 2: 0,
 3: 0,
 5: 0,
 8: 0,
 9: 0,
 11: 0,
 12: 0,
 13: 0,
 14: 0,
 16: 0,
 17: 0,
 18: 0,
 19: 0,
 20: 0}
 
统计每个数字出现的次数
In [8]: for x in data:
   ...:     c[x] +=1
   ...:
 
In [9]: c
Out[9]:
{1: 2,
 2: 1,
 3: 1,
 5: 2,
 8: 2,
 9: 2,
 11: 3,
 12: 2,
 13: 3,
 14: 2,
 16: 2,
 17: 2,
 18: 2,
 19: 3,
 20: 1}
 
对字典c按值排序(先把字典的键值对儿转成元组c.iteritems(),reverse=True倒序)
In [13]: a = sorted(c.iteritems(),key=lambda x:x[1],reverse=True)
 
In [14]: a
Out[14]:
[(11, 3),
 (13, 3),
 (19, 3),
 (1, 2),
 (5, 2),
 (8, 2),
 (9, 2),
 (12, 2),
 (14, 2),
 (16, 2),
 (17, 2),
 (18, 2),
 (2, 1),
 (3, 1),
 (20, 1)]
 
取前3个
In [15]: a[:3]
Out[15]: [(11, 3), (13, 3), (19, 3)]
 
将每个元组中第一个元素取出
In [18]: map(lambda a:a[0],a[:3])
Out[18]: [11, 13, 19]
 
 
方法(二)
from collections import Counter
 
c2 = Counter(data)
>>> c2
Counter({11: 3, 13: 3, 19: 3, 1: 2, 5: 2, 8: 2, 9: 2, 12: 2, 14: 2, 16: 2, 17: 2, 18: 2, 2: 1, 3: 1, 20: 1})
>>> c2[11]
3
>>> c2[20]
1
 
取频度最高的3个
>>> c2.most_common(3)
[(11, 3), (13, 3), (19, 3)]
posted @ 2020-09-23 12:41  Edward_han  阅读(145)  评论(0编辑  收藏  举报