如何解决求列表中位数时出现的TypeError类型错误
问题分析与解决
错误原因
你遇到的TypeError: list indices must be integers or slices, not float,根源是Python3中/运算符执行的是浮点数除法——哪怕计算结果是整数(比如示例里列表长度6,6/2得到3.0),返回值也是浮点数类型。而列表索引必须是整数,用浮点数当索引自然触发错误。
修复方案
把midIndex = len(list)/2改成整数除法midIndex = len(list)//2,//会直接返回舍去小数部分的整数结果,完美适配列表索引要求。
修复后的median函数:
def median(list): if len(list) == 0: return 0 list.sort() midIndex = len(list) // 2 # 替换为整数除法 if len(list) % 2 == 0: return (list[midIndex] + list[midIndex - 1]) / 2 else: return list[midIndex]
验证结果
运行修改后的代码,测试列表[3, 1, 7, 1, 4, 10]排序后为[1,1,3,4,7,10],midIndex=3,取索引3和2的元素4与3,计算(4+3)/2=3.5,和预期结果完全一致。
额外优化建议
mean函数里的list.sort()是多余操作,求和不需要依赖列表顺序,删掉能提升运行效率。- 避免用
list作为参数名,它是Python内置类型,会覆盖内置函数,建议改成nums或data这类通用名称。
内容的提问来源于stack exchange,提问作者Tyson_Codes
相关产品推荐
相关产品推荐

