首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写median函数

编写median函数
EN

Stack Overflow用户
提问于 2015-12-01 17:40:35
回答 3查看 589关注 0票数 1

我正在尝试编写一个中值函数,目前我有一个可以获取列表并对其进行排序,然后给出中值的函数。但我正在尝试重写它,这样如果列表中有偶数个元素,它就不会打印中位数,而是打印中位数介于列表中的两个数字。下面是我的代码

代码语言:javascript
复制
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,有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2015-12-01 18:27:24

导入统计信息

Statistics.median(数据)

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 17:49:37

您可以检查列表是否包含奇数个元素,然后相应地更改返回值:

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
>>> 
5
(5, 9)
票数 0
EN

Stack Overflow用户

发布于 2019-12-04 19:20:18

下面是一个这样做的例子。

代码语言:javascript
复制
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()

输出

代码语言:javascript
复制
5.0
[5, 9]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34017132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档