Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看專案原始碼
本篇閱讀的代碼實作計算串列中位數的功能,
本篇閱讀的代碼片段來自于30-seconds-of-python,
median
def median(list):
list.sort()
list_length = len(list)
if list_length % 2 == 0:
return (list[int(list_length / 2) - 1] + list[int(list_length / 2)]) / 2
return list[int(list_length / 2)]
# EXAMPLES
median([1,2,3]) # 2
median([1,2,3,4]) # 2.5
median函式接收一個串列,然后計算其中位數并回傳,
中位數可以將一個數集、一個串列分成數量相等的上下兩部分,對一組有限個數的資料來說,其中位數是這樣的一種數:這群資料的一半的資料比它大,而另外一半資料比它小,
計算有限串列的中位數首先需要講串列排序,如果資料的個數是奇數,則中間那個資料就是這群資料的中位數;如果資料的個數是偶數,則中間那2個資料的算術平均值就是這群資料的中位數,
函式median首先將串列排序,然后根據串列長度是否為偶數(list_length % 2 == 0),使用不同的方式計算中位數,%是取余的計算符,
串列長度是偶數的情況:
因為串列下標從0開始計算,所以list_length / 2和(list_length / 2) - 1分別為串列中間的兩個數,這兩個數的算數平均數就是中位數,
當串列長度是奇數的情況:
串列長度無法被2整除,使用int()強制轉換,會向零舍入(如果是正數就向下取整,如果是負數就向上取整),因此int(list_length / 2)就是串列中間的數,即中位數,
n為奇數的時候,int(n/2) = (n-1)/2為整數,串列開始下標為0,結尾下標是n-1,因為(n-1)/2 - 0 = (n-1) - (n-1)/2,所以(n-1)/2是中位數的下標,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345490.html
標籤:Python
