将列表作为输入并返回中值

时间:2016-11-04 18:42:05

标签: python list median

最后一直坚持这一点而且为了我的生命找不到什么是错的。所以有问题的练习是:

  

编写一个名为median的函数,它将列表作为输入并返回列表的中值。例如:median([1,1,2])应返回1.

我在codeacadamy上这样做,它一直告诉我它得到的答案是4(应该是4.5作为测试列表,用于检查我的代码是[4,5,5,4])。为了让事情变得更加奇怪,我在cscircles网站上的控制台IDE上尝试了代码(就像它的感觉一样)并且说它很好。

def median(y):
    x = sorted(y)
    x_len = len(x)
    if x_len % 2 == 0:
        start = x_len // 2
        median = (x[start-1] + x[start]) / 2
        return median
    else:
        start = x_len // 2
        median = x[start]
        return median

4 个答案:

答案 0 :(得分:2)

打开Python 2 REPL并尝试以下操作:

>>> (4+5)/2
4

您可以使用2.0强制浮动除法。

>>> (4+5)/2.0
4.5

在Python 3中,第一个示例将生成4.5,这将解释CodeCademy与其他站点之间的差异。

您还可以看到添加以下导入是否使您的代码适用于CodeCademy:

from __future__ import division

答案 1 :(得分:1)

首先投射为浮动。 float((x[start-1] + x[start]))/2

答案 2 :(得分:0)

只是一个小错误

def median(y):
 x = sorted(y)
 x_len = len(x)
 if x_len % 2 == 0:
  start = x_len // 2
  median = (x[start-1] + x[start]) / 2.0
  return median
else:
 start = x_len // 2
 median = x[start]
 return median

两个int的除法总是一个int。你应该把一个部分改成浮动

答案 3 :(得分:0)

def median(a):
    ordered = sorted(a)
    length = len(a)
    return float((ordered[length/2] + ordered[-(length+1)/2]))/2