Python:3D列表的索引错误

时间:2012-12-06 00:47:40

标签: python list 3d indexing

我之前从未使用2D或3D阵列,但我正在尝试制作迷宫。 在我的片段中,正方形是一个包含每个单元格实例的列表(因此在3x4迷宫中,正方形中将有12个实例) 然后我试图追加行,一行中所有正方形的列表,因此row [0]将包含前四个正方形实例,row [1]将是接下来的四个,等等。 row [x] .append(squares [y + z])抛出IndexError,我猜它是行[x]部分,但我不知道该怎么做才能修复它。我尝试使用extend而不是append。

numberOfRows = 3
numberOfColumns = 4
z = 0

for x in range(numberOfRows):
    for y in range(numberOfColumns):
        row[x].append(squares[y+z])
    z += 4

2 个答案:

答案 0 :(得分:1)

如果我猜对了,你想要:

numberOfRows = 3
numberOfColumns = 4
z = 0

squares = range(numberOfRows * numberOfColumns)

row = [[] for _ in xrange(numberOfRows)]
for x in range(numberOfRows):
    for y in range(numberOfColumns):
        row[x].append(squares[y+z])
    z += 4

print row

即,你只是错过了row定义。

编辑:

在阅读OP的评论之后,似乎考虑以下替代方案是值得的:

row = []
for x in range(numberOfRows):
    row.append([squares[y+z] for y in range(numberOfColumns)])
    z += numberOfColumns

因此,您事先不要在row中创建所有列表。

答案 1 :(得分:0)

这可以简化为以下内容:

>>> [squares[i:i+numberOfColumns] for i in range(0, len(squares), numberOfColumns)]
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]