在《【Python】利用setdefault函数实现dict的转置(key与value对互换),统计value出现的次数》(点击打开链接)中介绍过,如何统计dict中相同value的key的出现次数。本文介绍如何利用list自带的count函数,来统计list中每个元素出现的次数。
具体代码如下:
arr_appear=dict((a,arr.count(a)) for a in arr);
是的,就一行,其中arr_appear是一个dict,arr是要统计的list。
如下代码:
# -*-coding:utf-8-*-
arr = [1, 2, 3, 2, 3, 1, 4];
arr_appear = dict((a, arr.count(a)) for a in arr);
print arr_appear;
运行结果如下:
完成了一个求list中每个元素出现的次数的功能,返回一个dict,这个dict的key是list本身的元素,value是出现的次数。
本来arr.count(a),只是返回该元素的出现次数,这里只是在遍历这个list的同时,构造一个相应dict。
有了如上的理论,我们可以对《【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印到控制台》(点击打开链接)中介绍过,求众数的方法进行改造,具体的代码如下:
# -*-coding:utf-8-*-
# 众数
def get_mode(arr):
mode = [];
arr_appear = dict((a, arr.count(a)) for a in arr); # 统计各个元素出现的次数
if max(arr_appear.values()) == 1: # 如果最大的出现为1
return; # 则没有众数
else:
for k, v in arr_appear.items(): # 否则,出现次数最大的数字,就是众数
if v == max(arr_appear.values()):
mode.append(k);
return mode;
arr = [1, 2, 3, 2, 3, 1, 4];
print get_mode(arr);
运行的结果如下: