提取二维列表最后一列报list index out of range错误的原因与解决方法
错误原因
- 你代码里的
nestedList[1:19]是对外层的行列表做切片,得到的是原列表第2行到第19行(对应索引1到18,Python切片遵循左闭右开规则)组成的新列表,这个新列表一共只有18个元素,合法索引范围是0~17,不存在索引19的元素,自然会抛出list index out of range错误。 - 本质是逻辑理解偏差:这个写法是尝试取切片后行列表的第20个元素,根本没有逐行提取最后一列的操作,完全不符合需求逻辑。
正确实现方法
需求是提取所有行的最后一列元素,同时排除首行、末行,直接遍历目标行范围逐行取列值即可,推荐用简洁的列表推导式写法:
# nestedList[1:-1] 自动排除首行(索引0)和末行(索引19) # row[-1] 取每一行的最后一个元素,也就是最后一列,等价于row[19] variable = [row[-1] for row in nestedList[1:-1]]
如果要显式写出行索引范围,和切片[1:-1]等价的写法是nestedList[1:19],最终得到的结果完全一致。
如果习惯用普通循环实现,逻辑完全相同:
variable = [] # 遍历行索引1到18(跳过首行0、末行19) for row_idx in range(1, 19): variable.append(nestedList[row_idx][-1])
针对你给出的20×20测试列表,运行后variable的存储结果为:
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0]
内容的提问来源于stack exchange,提问作者Biochem
相关产品推荐
相关产品推荐

