提取二维列表中最后一列的值时出现意外的“列表索引超出范围”错误

分享于2022年07月17日 indexing list nested python 问答
【问题标题】:提取二维列表中最后一列的值时出现意外的“列表索引超出范围”错误(Unexpected "list index out of range" error when extracting values of last column in 2D list)
【发布时间】:2022-07-14 03:11:18
【问题描述】:

已经编码了一段时间,但对 Python 来说相对较新。为什么这不起作用,我有点傻眼。

我基本上有一个由 1 和 0 组成的 20x20 2D 嵌套列表(见帖子末尾)。

我的目标是将最后一列的所有元素(第一行和最后一行除外)存储到一个变量中。

我最初认为下面的代码可以工作:

variable = nestedList[1:19][19]

但是,这会引发“索引超出范围”错误。

为什么会出现这个错误,我该如何解决这个问题?

二维列表:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1],
[1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1],
[0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0],
[1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1],
[1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1],
[1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0],
[1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1],
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1],
[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0]]

  • nestedList[1:19] 只有 19 个元素,其索引为 0 到 18。所以 [19] 超出范围。

【解决方案1】:

[19] 不索引列,它索引行列表中的第 19 行。但是您已经对行进行了切片,因此只有 18 行,因此尝试访问 [19] 时会出错。

使用列表推导式获取每一行的元素:

[row[-1] for row in nestedList[1:-1]

请注意,您可以使用负索引从末尾开始计数。