如何统计出元素出现的频度
思路:先算出随机序列中每个元素出现的次数,再根据次数进行排序,取前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)]