Python访问intervals[i][0]触发int类型不可下标错误排查
报错触发原因
这个TypeError: 'int' type is not subscriptable错误的本质是:你对整数类型的值执行了下标访问操作(即[0]/[1]这类索引写法),说明原本应当是List[List[int]]结构的intervals,在运行过程中被破坏了二维结构,出现了整数类型的顶层元素。
直接触发点
问题出在重叠区间合并时的列表拼接逻辑:
intervals = intervals[:i] + [minval,maxval] + intervals[i+1:]
你在这里直接把minval、maxval两个整数作为独立顶层元素拼接到了intervals列表里,而不是将合并后的新区间作为一个嵌套的子列表加入。
举个实际运行的例子:
- 初始
intervals = [[1,3],[6,9]],待插入newInterval = [2,5] - 第一次循环i=0时,判断为重叠,计算得
minval=1、maxval=5 - 执行拼接后得到的
intervals = [] + [1,5] + [[6,9]] = [1,5,[6,9]]
此时intervals的前两个元素都是整数,不再是子列表。当循环执行i自增到1,下一轮访问intervals[i][0]也就是intervals[1][0]时,intervals[1]是整数5,对整数做下标访问就会直接抛出你遇到的类型错误。
代码附带的其他逻辑问题
除了直接触发报错的拼接错误,你的代码还有几处逻辑缺陷会导致运行结果不符合预期:
- 三个
if判断是顺序执行的,即使前两个判断已经将var设为False,第三个重叠处理的逻辑依然会执行,分支判断失效 - 重叠判断的条件使用了
or,逻辑写反:区间无重叠才是「新区间右端小于当前区间左端」「新区间左端大于当前区间右端」两个条件满足其一,重叠是两个条件都不满足的场景 - 合并区间后直接对
i做自增是错误的,新合并出的区间可能和后续相邻区间依然存在重叠,需要继续判断不能直接跳过 - 没有做数组越界判断,当i增长到超过
intervals长度时会触发索引越界错误
内容的提问来源于stack exchange,提问作者Bepop
相关产品推荐
相关产品推荐

