Python移除列表中长度为7的子列表时触发IndexError问题求助
解决列表遍历移除元素时的索引越界问题
错误原因
你的代码在遍历列表时直接修改原列表,导致列表长度动态缩短。循环初始时range(0, len(C))基于原列表长度(5)生成遍历范围,但当你移除元素后,列表长度变为4,当循环执行到i=4时,新列表的最大索引是3,访问C[4]就触发了IndexError。
解决方案
方案1:列表推导式(推荐)
直接生成过滤后的新列表,逻辑简洁且不会出现索引问题:
C = [[0, 2, 3, 5], [1, 3, 4, 6], [2, 0, 3, 5], [3, 0, 1, 2, 4, 5, 6], [8, 5, 6, 7, 9, 10, 11]] C = [sublist for sublist in C if len(sublist) != 7] print(C)
输出结果:
[[0, 2, 3, 5], [1, 3, 4, 6], [2, 0, 3, 5]]
方案2:倒序遍历原列表删除元素
如果需要在原列表上直接修改,可以采用倒序遍历的方式,这样删除元素不会影响未遍历的索引:
C = [[0, 2, 3, 5], [1, 3, 4, 6], [2, 0, 3, 5], [3, 0, 1, 2, 4, 5, 6], [8, 5, 6, 7, 9, 10, 11]] for i in range(len(C)-1, -1, -1): if len(C[i]) == 7: del C[i] print(C)
输出结果与方案1一致。
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

