不理解这个求中位数的代码

def median(numbers):
sorted(mumbers)
size=len(numbers)
if size%2==0:
med =(numbers[size//2-1] + numbers[size//2])/2
else:
med = numbers[size//2]
return med
我可不理解为啥求偶数的时候要size除以二再减一,难道不应该加一嘛
奇数的个数也整除不了二哇,数学上不是size+1再除以二吗..

两个知识点,数组从零开始计数,偶数size时,size除二减一与除二位置的数字平均数为中位数。
第二,代码中整数除整数可以理解为舍弃余数,只取正数部分,例如3/2=1。

确实,我个人认为这段代码也有问题,你运行测试了吗,偶数((size/2-1)+(size/2+1))/2 奇数(size/2),建议你去运行测试一下。

中位数定义:对于一组有限个数的数据来说,它们的中位数是这样的一种数:这群数据里的一半的数据比它大,而另外一半数据比它小。 计算有限个数的数据的中位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。

int运算是只保留整数部分,比如7/2=3.5,但由于7是int类型的,7/2结果为3.求中位数的时候,如果列表个数是偶数,比如1 2 3 4,中位数是(2+3)/2,即取下标为4/2-1和4/2的数相加再除以2