编写求中位数函数时持续报“索引为浮点数而非整数”错误求助
解决"index a float not integer"错误:中位数函数修正
嘿,我一眼就看到问题所在啦!你遇到的报错完全是因为列表索引必须是整数,但你代码里用了浮点数来计算索引——和列表里的元素是不是整数没关系哦😉
错误原因分析
你代码里的这几行是问题核心:
# 偶数情况的索引计算 sorted_lst[0.5*len(sorted_lst)] sorted_lst[(0.5*len(sorted_lst))-1] # 奇数情况的索引计算 sorted_lst[0.5*((len(sorted_lst))-1)]
比如当列表长度是4时,0.5*4=2.0,这是个浮点数,Python不允许用浮点数作为列表的索引值,哪怕它的数值等于整数也不行。
修正后的代码
我们可以用Python的**整数除法//**来计算索引,它会直接返回整数结果,完美解决这个问题:
def median(lst): sorted_lst = sorted(lst) length = len(sorted_lst) if length % 2 == 0: # 用整数除法获取两个中间元素的索引 mid_right = length // 2 mid_left = mid_right - 1 even_median = 0.5 * (sorted_lst[mid_left] + sorted_lst[mid_right]) return even_median else: # 奇数长度时,整数除法直接得到中间元素的索引 odd_median = sorted_lst[length // 2] return odd_median
关键改动说明
- 偶数长度场景:
length//2会得到中间靠右的元素索引(比如长度4时,4//2=2),mid_right-1就是中间靠左的索引(1),两个都是整数,合法可用。 - 奇数长度场景:比如列表长度是5,
5//2=2,正好是从0开始计数的中间元素索引,直接取值即可。
这样修改后,你的函数就能正常计算中位数啦!
内容的提问来源于stack exchange,提问作者Jane Watson
相关产品推荐
相关产品推荐

