2016-12-26 41 views
0

我試圖確定一個n元素列表的中位數,我只是看不到我做錯了什麼。n個元素列表中的中位數

我有sorted(list)以便元素按正確的順序排列,但得到的中位數爲5.0而不是正確的4.5

我的代碼看起來像這樣。

def median(lista): 
    median_even1 = 0 
    median_even2 = 0 
    median_sum = 0 
    median_average = 0 
    if len(lista) % 2 == 0: 
     sorted(lista) 
     median_even1 += lista[(len(lista)/2)] 
     median_even2 += lista[(len(lista)/2 - 1)] 
     median_sum = median_even1 + median_even2 
     median_average = (median_sum) // (2.0) 
     return median_average 
    else: 
     sorted(lista) 
     return lista[(len(lista)/2)] 

有什麼建議嗎?

回答

7

sorted()不適用,它返回一個新的排序列表。重新分配它(lista = sorted(lista))或使用list.sort()代替(lista.sort())。

+0

OMG我覺得很愚蠢的,謝謝 –

+0

注意,該代碼仍然存在一些失誤,其中至少有一個會導致一個回溯(上Python 3中,所以我想這是Python的2 ...還是,產生錯誤的答案)。 – TigerhawkT3

0
>>> 5//2.0 
2.0 
>>> float(5)/2.0 
2.5 

//2.0不會在這種情況下工作

1

,而修復這些錯誤(sorted()不能在原地進行操作,len(lista)/2是一個浮點數,因此沒有,您可以簡化很多代碼的一個有效的索引值,使用//帶有浮點數字,並且可能期望精確的浮點數,等等)。

def median(lista): 
    lista = sorted(lista) 
    half = len(lista)//2 
    if half == len(lista)/2: 
     return (lista[half]+lista[half-1])/2. 
    return lista[half]