n 个元素列表中的中位数

Median in a list of n elements

我正在尝试确定 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)]

有什么建议吗?

sorted() 不存在,它 returns 是一个新的排序列表。重新分配它 (lista = sorted(lista)) 或改用 list.sort() (lista.sort()).

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

//2.0 在这种情况下不起作用

您可以在修复错误的同时简化很多代码(sorted() 未在适当的位置运行,len(lista)/2 是一个浮点数,因此不是有效的索引值,使用 // 带有 float 字面量并且可能期望精确的 float,等等)。

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]