我一直在寻找如何在列表中找到中间数字,以便我不使用中值函数,但无法找到如何做到这一点的信息。
我需要编写一个代码,它接受中(L)函数(必须定义它),将列表L作为其参数,并返回L的中间位置的项目。(为了使中间很好-defined,我应该假设L有奇数长度。)
这就是我现在所拥有的,实际上根本不知道该怎么做。
def middle (L):
i= len((L)[0:-1])/2
return i
print (middle)
答案 0 :(得分:3)
要查找中位数,只需对列表进行排序并返回中间位置的数字或(如果列表中包含偶数个元素),则返回中间2个元素的平均值:
def middle(L):
L = sorted(L)
n = len(L)
m = n - 1
return (L[n/2] + L[m/2]) / 2.0
示例:
>>> print middle([1, 2, 3, 4, 5])
3.0
>>> print middle([1, 2, 3, 4, 5, 6])
3.5
答案 1 :(得分:1)
正如NPE的回答所暗示的那样,当列表中的元素数量不均匀时,你必须得到一个排序列表的中间元素,如果它具有偶数个元素,则取中间两个元素的平均值:
def median(l):
srt = sorted(l)
mid = len(l)//2
if len(l) % 2: # f list length mod 2 has a remainder the list is an odd lenght
return srt[mid]
else:
med = (srt[mid] + srt[mid-1]) / 2 # in a list [1,2,3,4] srt[mid]-> 2, srt[mid-1] -> 3
return med
答案 2 :(得分:0)
为了进行优化,我们应该使用二进制搜索来检测中位数,而不是对所有数字进行排序。 有关详细信息,请检查: https://www.quora.com/Given-a-list-of-unsorted-numbers-how-would-you-find-the-median-without-sorting-the-original-array
有关代码,请检查: https://medium.com/@nxtchg/calculating-median-without-sorting-eaa639cedb9f
有两种众所周知的计算中位数的方法:
幼稚的方式(排序,选择中间)
使用快速选择(或类似的加权中位数算法)
希望有帮助。