【问题标题】:writing a median function写一个中值函数
【发布时间】:2015-12-01 09:40:35
【问题描述】:

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

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 有什么建议吗?

【问题讨论】:

  • 您告诉它在函数末尾返回两个中间数字的平均值。我建议检查是否 n%2 == 0 或 n%2 ==1,然后有一个 if-then 语句来确定返回什么
  • [5,10,10,15]返回什么?

标签: python median


【解决方案1】:

导入统计数据

statistics.median(数据)

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

      【解决方案3】:

      这是一个例子。

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多