Python中位数计算器报错‘List Indices must be integer or slices, not float’求助
你的中位数计算器代码中的错误分析
核心错误点:
- 未对列表排序:中位数的计算必须基于有序数据集,你的代码直接使用原无序列表,导致计算结果完全不符合中位数定义。比如测试用例
[5,6,7,8,9,6,5,5]是无序的,直接取索引值无法得到正确中位数。 - 偶数长度时的索引类型错误:当列表长度为偶数时,
y = len(x)/2在Python中会返回浮点数(比如长度8时y=4.0),而列表索引只能是整数,这会触发TypeError: list indices must be integers or slices, not float。 - 偶数长度时的数值选取错误:代码中
x[y][-1]是完全错误的写法——x[y]是列表中的单个数值,并非可索引的序列。正确的做法应该是取排序后列表的中间两个数,即x[y-1]和x[y]。
修正后的代码:
def median(x): # 先对列表进行排序,这是计算中位数的前提 sorted_x = sorted(x) length = len(sorted_x) if length % 2 == 0: # 偶数长度:取中间两个数的平均值 mid_left = sorted_x[length//2 - 1] mid_right = sorted_x[length//2] return (mid_left + mid_right) / 2 else: # 奇数长度:直接取中间位置的数 return sorted_x[length//2] l1 = [5, 6, 7, 8, 9, 6, 5, 5] print(median(l1)) # 输出6.0
内容的提问来源于stack exchange,提问作者SaviorTech
相关产品推荐
相关产品推荐

