请教一下python里的两个问题

问题遇到的现象和发生背景

问题:
1,为什么这里的len要减一呢?
def dev(numbers, mean): #计算方差
sdev =0.0
for num in numbers
sdev=sdev +(num -mean)**2
return pow(sdev/(len(numbers)-1), 0.5)

2,为什么计算中位数的时候,取中位数位置要减一?


img


问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

用平均值的和的平方除以长度不就行了?为什么长度要减一呢?
后面的问题也是,如果用长度除2得到的应该是中位数靠前的那一位,如果减一就不在中间位置了不是吗,比如6/2,得到的3,减一的话就是位置2了

朋友,python的索引值都是从0开始的哈
比如列表:['a', 'd', '3'] 一共三个元素
他们对应的下表是0、1、2,所以如果你直接使用它的长度(也就是3)进行索引,会造成数组越界
另一个问题也是一样的哈,记住索引从 0 开始~

img

列表的len在用的时候都会-1,避免index out of bound

除2减1是因为【0,1,2,3,4,5】这里面 6//2 -1 = 位置2, 是2,6//2 = 位置3,是3, 两者的平均值是2.5,也就是这个list的中位值。如果不-1的话,就会取到两个3,就不对了。这里你仔细想想,跟len-1是有关的

因为类似数组或列表的结构里,下标都是从0开始。
比如一个有100个数的数组n,它的第一个值是n[0],最后一个值是n[99],那么它的中位数n[49]就是n[50-1]