编写中位数函数

问题描述 投票:1回答:3

我正在尝试编写一个中位数函数,目前我有一个接受列表并将其排序然后给出中位数的函数。但是我正在尝试重写它,以便如果列表中有偶数个元素,则它不会打印中位数,而是从列表中的两个数字中位数介于两者之间。这是我的代码

def getMedian(A):
    A=sorted(A)
    n=len(A)
    m=n-1
    return (A[int(n/2)]+A[int(m/2)])/2

def main():
    myList=[3,5,9,3,11]
    print(getMedian(myList))
    myList=[3,9,11,5]
    print(getMedian(myList))
main()

当前它先输出5,然后输出7,但我试图将其输出到5,然后输出5,9,有什么建议吗?

python median
3个回答
1
投票

进口统计

statistics.median(data)


0
投票

您可以检查列表中元素的数量是否为奇数,然后相应地更改返回值:

def getMedian(A):
    A = sorted(A)
    n = len(A)
    m = n-1
    if n%2 == 1:
        return (A[int(n/2)]+A[int(m/2)])/2
    else:
        return A[int(m/2)], A[int(n/2)]

def main():
    myList = [3,5,9,3,11]
    print(getMedian(myList))
    myList = [3,9,11,5]
    print(getMedian(myList))

main()

输出:

>>> 
5
(5, 9)

0
投票

这里是一个例子。

def getMedian(A):
    A.sort()
    mid = len(A) // 2
    return [[A[~mid], A[mid]], (A[mid] + A[~mid]) / 2][len(A) % 2]


def main():
    myList = [3, 5, 9, 3, 11]
    print(getMedian(myList))
    myList = [3, 9, 11, 5]
    print(getMedian(myList))


main()

输出

5.0
[5, 9]
© www.soinside.com 2019 - 2024. All rights reserved.