最近在刷算法题,碰到一个求中位数的题
在Vscode中运行通过,但在在线编译器一直报错,通过打印返回值类型发现了python2和python3在除法上的巨坑。
我们知道基本运算中,python3关于“/”的运算贴近我们平常的四则运算,/返回浮点数,但在python2.X中该数有以下特性:
被除数 和 除数都是整数时>>>返回int
当被除数和除数只要有一个是浮点数>>>返回浮点数
在判断奇偶时,为了规避这个坑,我们可以使用求余运算来判断,即 %
在求两个数的平均数时,多加一个条件判断来输出结果。
比如,求一个整数列中的中位数,我是用下面的思路来求得:
#middnum是一个关于求整数列表的中位数的函数
def middnum(L):
Q = L
Q.sort()
n = len(Q)
m = 0
if n % 2 ==1: #此处为判断列表项的个数为奇数项
i = int((n-1)/2)
m = Q[i]
elif n % 2 == 0: #此处为判断列表项的个数为偶数项
i = int(n/2)
j = i-1
if (Q[i]+Q[j]) % 2 == 1: #在打印中位数时,由于/在不同python版本的不同表现,进行求#
值前的判断
print((Q[i]+Q[j])/2.0)
else:
print(int((Q[i]+Q[j]) / 2)) #此处是修正python3,使其和python2表现一直
else:
print (m)
L = [0, 1, 8, 3, 4]
c = middnum(L)