在python中查找中位数时出错

时间:2017-06-16 15:57:41

标签: python

我试图找到给定列表中的中位数,但一直得到错误的答案。我在下面的代码中缺少什么?

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

2 个答案:

答案 0 :(得分:0)

您的问题是您没有使用整数除法,因此会在程序中的点处审查无效答案。以位置开头的行需要变为:

position = (len(x) + 1)//2

双重除法符号将使其成为整数除法,并且在尝试将浮点数作为数组值时不会再出错。

答案 1 :(得分:0)

这段代码应该通过使用整数除法在Python 3中产生正确的结果。

net

在python 2中,你可以使用浮点除法而不是整数除法,你会得到相同的结果(虽然只是使用整数来保证安全)除了SELECT tablea.actdatetime AS actdate, SUM (CASE WHEN tablea.code = 'NDSB' THEN tablea.amt END) AS disbursed, SUM (CASE WHEN tablea.code = 'SPMT' THEN tablea.amt END) AS repaid, SUM (CASE WHEN tablea.code IN ('NDSB', 'SPMT') THEN tablea.amt END) AS net FROM tablea GROUP BY actdatetime 块中的除法应该超过浮动强制它返回一个浮点数。

如:

def median(x):
  x = sorted(x) #sort list
  final = 0 #confusing var name. try res
  position = (len(x) + 1)//2 #integer division forces the index to be an int
  if (len(x) + 1) % 2 == 0: #should use len(x) % 2 == 1 for efficiency
    final = x[position - 1] #set result to median of array
  else:
    final = (x[position - 1] + x[position])/2 #set result to median of array
  return final

print(median([1,3,2,5]))

如果您希望程序与两个版本完全兼容,则必须同时使用这两个版本