不使用中值函数的中间数,Python

时间:2014-10-13 18:51:19

标签: python median

我一直在寻找如何在列表中找到中间数字,以便我不使用中值函数,但无法找到如何做到这一点的信息。

我需要编写一个代码,它接受中(L)函数(必须定义它),将列表L作为其参数,并返回L的中间位置的项目。(为了使中间很好-defined,我应该假设L有奇数长度。)

这就是我现在所拥有的,实际上根本不知道该怎么做。

def middle (L):
    i= len((L)[0:-1])/2
    return i
print (middle)

3 个答案:

答案 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

有两种众所周知的计算中位数的方法:

  1. 幼稚的方式(排序,选择中间)

  2. 使用快速选择(或类似的加权中位数算法)

希望有帮助。