【问题标题】:Median in a list of n elementsn 个元素列表中的中位数
【发布时间】:2017-05-10 21:42:08
【问题描述】:

我正在尝试确定 n 个元素列表的中位数,但我看不出我做错了什么。

我有sorted(list),因此元素的顺序正确,但我得到的中位数是5.0,而不是正确的4.5

我的代码如下所示。

def median(lista):
    median_even1 = 0
    median_even2 = 0
    median_sum = 0
    median_average = 0
    if len(lista) % 2 == 0:
        sorted(lista)
        median_even1 += lista[(len(lista)/2)]
        median_even2 += lista[(len(lista)/2 - 1)]
        median_sum = median_even1 + median_even2
        median_average = (median_sum) // (2.0)
        return median_average
    else:
        sorted(lista)
        return lista[(len(lista) / 2)]

有什么建议吗?

【问题讨论】:

    标签: python list median


    【解决方案1】:

    sorted() 不存在,它返回一个新的排序列表。要么重新分配它 (lista = sorted(lista)),要么改用 list.sort() (lista.sort())。

    【讨论】:

    • 请注意,这段代码仍然有几个错误,其中至少一个会导致回溯(在 Python 3 上,所以我假设这是 Python 2...仍然会产生错误的答案)。跨度>
    【解决方案2】:

    您可以在修复错误的同时简化很多代码(sorted() 未就地运行,len(lista)/2 是浮点数,因此不是有效的索引值,使用带有浮点文字的 // 和大概期望一个精确的浮点数,等等)。

    def median(lista):
        lista = sorted(lista)
        half = len(lista)//2
        if half == len(lista)/2:
            return (lista[half]+lista[half-1])/2.
        return lista[half]
    

    【讨论】:

      【解决方案3】:
      >>> 5//2.0
      2.0
      >>> float(5)/2.0
      2.5
      

      //2.0 在这种情况下不起作用

      【讨论】:

        猜你喜欢
        • 2018-03-11
        • 2020-11-09
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        相关资源
        最近更新 更多