首页 > 解决方案 > Python / Pygame 网格设计因追加“索引超出范围”而失败

问题描述

我正在尝试从第 2 行第 13 列开始创建一个网格。该网格将在第 12 行第 25 列结束。但是我在 append(0) 行上不断收到“列表索引超出范围”错误。显然我不明白附加是如何工作的。

grid = []
for row in range(2,12):
    # Add an empty array that will hold each cell
    # in this row
    grid.append([])
    for column in range(13,25):
        grid[row].append(0)  # Append a cell

标签: pythonpygame

解决方案


列表的索引始终从 0 开始。range(2, 12)创建从 2 到 12 的数字。但是列表的索引grid仍然从 0 开始。您需要从 中减去 2 row

grid[row].append(0) # Append a cell

grid[row-2].append(0)  # Append a cell

len(grid)在追加新行之前,使用 , 获取下一行的索引:

grid = []
for row in range(2, 12):
    
    index_of_next_row = len(grid)
    grid.append([])
    
    for column in range(13, 25):
        grid[index_of_next_row].append(0)

或者,您可以创建一个 roe 并在行完成时将其附加到网格:

grid = []
for row in range(2, 12):
    
    new_row = []
    
    for column in range(13, 25):
        new_row.append(0)

    grid.append(new_row)

甚至更短:

grid = [[0 for cell in range(13, 25)] for row in range(2, 12)]

推荐阅读