我试图创建一个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
我没有看到我的错误,你能帮忙吗?
答案 0 :(得分:3)
您需要grid[row][column]
代替grid[column][row]
。
请注意,您无法执行[[[[]]*10]*10]*10
,因为它会创建别名,并且当修改一个列表时,它们都会被修改。
答案 1 :(得分:2)
在最后一行column
等于1(且row
仍然为0)的示例中
grid[column][row].append([])
grid
中没有可以使用grid[1]
获取的元素,这会导致错误。
我们可以将最后一行更改为
grid[row][column].append([])
对于此任务,我们也可以使用list comprehension之类的
grid = [[[[]
for height in range(10)]
for column in range(10)]
for row in range(10)]
为什么不给@rassar建议?因为它会复制相同的list
并且它不是我想要的(更多在此thread中):
>>>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,这是关于多维数组的
答案 2 :(得分:2)
正如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]
然而,完全初始化这样的列表可能更常见 not 。相反,只需创建一个基本列表并根据需要进行扩展。如果你确实需要一个合适的多维数组,可以考虑使用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
循环方法。