【Python】利用count函数求list中每个元素出现的次数,求众数的改进

在《【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);

运行的结果如下:


你可能感兴趣的:(Python,Python,list,count,众数,出现频率)