2016-12-26 44 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]