Python n个元素列表中的中位数
我试图确定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
进行了排序(列表)
以便元素的顺序正确,但我得到的中位数是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]