在 Python 中创建 3d 列表时出现索引错误



我正在尝试创建一个 3d 列表,但不断收到错误。这是我的代码:

grid = []
for row in range(10):
    grid.append([])
    for column in range(10):
        grid[row].append([])
        for height in range(10):
            grid[column][row].append([])

这是我得到的错误:

Traceback (most recent call last):
  File "/Users/kosay.jabre/Desktop/3dgrid.py", line 7, in <module>
    grid[column][row].append([])
IndexError: list index out of range

我没有看到我的错误,你能帮忙吗?

你需要

grid[row][column]而不是grid[column][row]

请注意,您不能这样做[[[[]]*10]*10]*10因为它会创建别名,并且当一个列表被修改时,它们都会被修改。

在您的

示例中,当最后一行的column等于 1(并且row仍然是 0(时

grid[column][row].append([])

grid中没有可以用grid[1]获得的元素,这会导致错误。

我们可以将最后一行更改为

grid[row][column].append([])

对于此任务,我们还可以使用列表推导,例如

grid = [[[[]
          for height in range(10)]
         for column in range(10)]
        for row in range(10)]

为什么不@rassar建议? 因为它会复制相同的list S 并且我想这不是您想要的(更多内容在此线程中(:

>>>grid = [[[[]
          for height in range(10)]
         for column in range(10)]
        for row in range(10)]
>>>grid2 = [[[[]] * 10] * 10] * 10
>>>grid[0][0][0].append(1)
>>>grid2[0][0][0].append(1)
>>>grid
 [[[[1], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]],
  [[[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []], [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []],
   [[], [], [], [], [], [], [], [], [], []]]]
>>>grid2
[[[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]],
 [[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
  [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]]]

最后你应该看看NumPy,它是关于多维数组的

正如 rassar 提到的,你得到了索引错误,因为你反转了你的索引。你应该有grid[row][column]而不是grid[column][row].

这是在Python中制作常规"多维"列表的标准方法。

def show(g):
    for block in g:
        for row in block:
            print(row)
        print()
    print()
grid = []
for z in range(3):
    block = []
    for y in range(4):
        row = [0] * 5
        block.append(row)
    grid.append(block)
show(grid)
for z in range(3):
    for y in range(4):
        for x in range(5):
            n = 100 * z + 10 * y + x + 111
            grid[z][y][x] = n
show(grid)

输出

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

[111, 112, 113, 114, 115]
[121, 122, 123, 124, 125]
[131, 132, 133, 134, 135]
[141, 142, 143, 144, 145]
[211, 212, 213, 214, 215]
[221, 222, 223, 224, 225]
[231, 232, 233, 234, 235]
[241, 242, 243, 244, 245]
[311, 312, 313, 314, 315]
[321, 322, 323, 324, 325]
[331, 332, 333, 334, 335]
[341, 342, 343, 344, 345]

但是,完全初始化这样的列表可能更常见。相反,只需创建一个基本列表并根据需要对其进行扩展。如果您确实需要一个合适的多维数组,请考虑使用 Numpy。


顺便说一句,可以将这些for循环压缩为嵌套列表理解:

grid = [[[0] * 5 for y in range(4)] for z in range(3)]

它肯定比以前的代码更紧凑,速度略快,但可读性稍差。

为了提高可读性,我们可以将其分散在几行上

grid = [
    [[0] * 5 for y in range(4)] 
        for z in range(3)
]

但它仍然相当密集,直到你对 Python 非常熟悉,我建议使用我之前使用的传统 for 循环方法。

相关内容

  • 没有找到相关文章

最新更新