1. 程式人生 > >【Python】利用count函式求list中每個元素出現的次數,求眾數的改進

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

執行的結果如下: