Python求中位數
每個人都像一輛車。檔次有高低,性能有好壞,顏值有高低。但上了路,總歸是要向前開。
-
中位數是一個可將數值集合劃分爲相等的上下兩部分的一個數值。
如果列表數據的個數是奇數,則列表中間那個數據就是列表數據的中位數;
如果列表數據的個數是偶數,則列表中間那2個數據的算術平均值就是列表數據的中位數。 -
輸入: 一個作爲數組的整數(int)列表(list)的。
-
輸出: 數組的中位數(int, float).
示例
get_median([1, 2, 3, 4, 5]) == 3
get_median([3, 1, 2, 5, 3]) == 3
get_median([1, 300, 2, 200, 1]) == 2
get_median([3, 6, 20, 99, 10, 15]) == 12.5
前提: 1 < len(data) ≤ 1000 all(0 ≤ x < 10 ** 6 for x in data)
普通方法:
# 對列表進行排序,針對列表長度是奇數還是偶數的不同情況,計算中位數。
def get_median(data):
data = sorted(data)
size = len(data)
if size % 2 == 0: # 判斷列表長度爲偶數
median = (data[size//2]+data[size//2-1])/2
data[0] = median
if size % 2 == 1: # 判斷列表長度爲奇數
median = data[(size-1)//2]
data[0] = median
return data[0]
最佳方法:
利用了取反數和爲1的特性,通過列表負索引來獲得列表中位數。
# 函數:
def get_median(data):
data.sort()
half = len(data) // 2
return (data[half] + data[~half]) / 2
對 return (data[half] + data[~half]) / 2
的解釋:
# 解析:
if len = 6, half = 3, -half = -4, 此時 ,對中間2個數 data[~half] 和 data[half] 求和,再取平均值
if len = 5, half = 2, ~half = -3, 此時 data[half] = data[~half] ,求和取平均,等於 data[half]
all: half + ~half = -1