2015-12-01 34 views
1

我想寫一箇中位數函數,目前我有一個需要一個列表並對其進行排序然後給出中位數。但我試圖重寫它,以便如果列表中包含偶數個元素,它不會打印中位數,而是列表中位數介於中間的2個數字。繼承人我的代碼寫一箇中位數函數

def getMedian(A): 
    A=sorted(A) 
    n=len(A) 
    m=n-1 
    return (A[int(n/2)]+A[int(m/2)])/2 

def main(): 
    myList=[3,5,9,3,11] 
    print(getMedian(myList)) 
    myList=[3,9,11,5] 
    print(getMedian(myList)) 
main() 

目前它輸出5,然後7但我試圖讓它輸出5,然後5,9任何意見?

+0

您告訴它在函數結束時返回2箇中間數字的平均值。我建議檢查是否n%2 == 0或n%2 == 1,然後有一個if-then語句來確定返回的內容 – mauve

+0

以及返回什麼'[5,10,10,15]'? –

回答

0

你可以檢查列表中有奇數個元素,然後改變返回值(一個或多個)相應:

def getMedian(A): 
    A = sorted(A) 
    n = len(A) 
    m = n-1 
    if n%2 == 1: 
     return (A[int(n/2)]+A[int(m/2)])/2 
    else: 
     return A[int(m/2)], A[int(n/2)] 

def main(): 
    myList = [3,5,9,3,11] 
    print(getMedian(myList)) 
    myList = [3,9,11,5] 
    print(getMedian(myList)) 

main() 

輸出:

>>> 
5 
(5, 9) 
1

進口統計

統計.median(數據)