【问题标题】:Take a list as an input and return the median value将列表作为输入并返回中值
【发布时间】:2016-11-04 18:42:05
【问题描述】:

上次被困在这个问题上,我这辈子都找不到问题所在。所以有问题的练习是:

编写一个名为 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

【问题讨论】:

  • 如果你的输出不能保证是单调的,要找到中值,你需要事先对列表进行排序。此外,Python 2 中的整数除法(正如其他人所提到的)。
  • 可能的整数除法。尝试在文件顶部添加 from future 导入部门

标签: python list median


【解决方案1】:

打开 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

【讨论】:

  • 他们从不同的在线系统得到不同结果的原因可能是因为其中一些使用 Python 3,其中“真实”除法是默认的。看来 OP 也学习了 Python 3,因为他们使用了 // 运算符。
  • 是的,我刚刚更新了我的答案,而您的评论似乎澄清了这一点。
  • @L3viathan // 也适用于许多早期版本的 Python,唯一改变的是 / 的默认行为。您可以在 2.7 中使用 from __future__ import division 轻松更改它。这种混乱正是 Python 3 改变事物的原因。
  • @L3viathan 是的,我在学习 python 3 之前做了一门课程,现在我只是加快了 python 2 的课程,尽管据我所知差异很小。
  • @MarkMcgrath 所以只要在你的代码中使用from __future__ import division,在 Python 2 中它总是正确的方法。
【解决方案2】:

首先转换为浮点数。 float((x[start-1] + x[start]))/2

【讨论】:

  • 啊哈棒棒哒。它正在转换为 int,所以它向下舍入到 4。明白了!非常感谢您的帮助。那个让我很烦,因为这对我来说应该很容易。
【解决方案3】:

只是一个小错误

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。您应该将其中一部分更改为浮动

【讨论】:

    【解决方案4】:
    def median(a):
        ordered = sorted(a)
        length = len(a)
        return float((ordered[length/2] + ordered[-(length+1)/2]))/2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多