Python n个元素列表中的中位数

Python n个元素列表中的中位数,python,list,median,Python,List,Median,我试图确定n个元素列表的中位数,但我看不出我做错了什么 我对进行了排序(列表)以便元素的顺序正确,但我得到的中位数是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

我试图确定n个元素列表的中位数,但我看不出我做错了什么

我对
进行了排序(列表)
以便元素的顺序正确,但我得到的中位数是
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()
未就位,它将返回一个新的排序列表。要么重新分配它(
lista=sorted(lista)
),要么改用
list.sort()
lista.sort()


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

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


请注意,这段代码仍然有几个错误,其中至少有一个错误会导致回溯(在Python3上,所以我假设这是Python2…仍然会产生错误的答案)。
>>> 5//2.0
2.0
>>> float(5)/2.0
2.5
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]