求两个有序数组中位数时触发TypeError:列表索引需为整数而非浮点数
列表索引类型错误的原因及修复方案
错误原因
你代码里的问题出在除法运算符的使用上:在Python 3中,/执行的是浮点除法,哪怕两个整数相除,结果也会是浮点数类型。比如当合并后的数组长度为奇数(比如测试用例里的3)时,len(nums1)/2计算得到的是1.5,这是一个浮点数。而列表的索引必须是整数或切片,用浮点数作为索引自然会触发TypeError: list indices must be integers or slices, not float错误。
修复方法
把代码中的/替换为//(整数除法),它会返回向下取整的整数结果,完全符合中位数的索引计算需求:
class Solution(object): def findMedianSortedArrays(self, nums1, nums2): nums1.extend(nums2) nums1.sort() length = len(nums1) if length % 2 == 0: a = length // 2 return float(nums1[a] + nums1[a-1]) / 2 else: a = length // 2 return float(nums1[a]) if __name__ == "__main__": p = [1,3] t = [2] print(Solution().findMedianSortedArrays(p,t)) # 输出2.0 p2 = [1,2] t2 = [3,4] print(Solution().findMedianSortedArrays(p2,t2)) # 输出2.5
验证说明
- 测试用例1:合并后数组为
[1,2,3],长度3,3//2=1,取nums1[1]即2,返回2.0,符合预期。 - 测试用例2:合并后数组为
[1,2,3,4],长度4,4//2=2,取nums1[2]和nums1[1]求和后除以2,得到2.5,符合预期。
内容的提问来源于stack exchange,提问作者user20502753
相关产品推荐
相关产品推荐

