我正在尝试创建一个 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
循环方法。