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