老狗——python求中位數

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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章