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
是中位數的下標。