我试图找到给定列表中的中位数,但一直得到错误的答案。我在下面的代码中缺少什么?
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
答案 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]))
如果您希望程序与两个版本完全兼容,则必须同时使用这两个版本