在 Python 中使用 for 循环的 2D 网格

我想在 python 中创建一个带有 for 循环的 2D 网格。我可以做这样的简单代码:


cols = 10

rows = 10

grid = [[0 for x in range(cols)] for y in range(rows)]

print(grid)

但是当我尝试在行中遍历 i 然后在列中遍历 j 时,它显示错误:列表索引超出范围。不确定我的编码哪里出了问题?


rows = 10

cols = 10

i = 0

for i in range(rows):

    for j in range(cols):

        grid[i].append([j])

        i += 1


哈士奇WWW
浏览 164回答 3
3回答

Cats萌萌

在使用类似grid[i].append(). 因为最初列表中没有任何内容,而您指的是不可用的内容。因此,你的错误。:(您可以改为在每个外部迭代中创建一个子列表,并附0加到内部迭代中的前一个子列表:cols = 10rows = 10grid = []for _ in range(rows):    grid.append([])    for _ in range(cols):        grid[-1].append(0)print(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],#  [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]]将整个组合成一行:grid = [[0 for _ in range(cols)] for _ in range(rows)]

FFIVE

你增加了i两次。第一次进去for i in range(rows),第二次跟i += 1。删除第二个语句,使其看起来像这样:cols = 10rows = 10grid = [[0 for x in range(cols)] for y in range(rows)]for i in range(rows):    for j in range(cols):        grid[i].append([j])代替:for i in range(rows):    for j in range(cols):        grid[i].append([j])        i += 1此外,这个变量初始化当然是不必要的: i = 0如果您想找到替代方法来做到这一点:grid = [[0 for x in range(cols)] for y in range(rows)]您还必须使用嵌套数组初始化数组:grid = []for i in range(rows):    grid.append([])    for j in range(cols):        grid[i].append(0)

HUX布斯

有几个问题:您不会grid在循环之前实例化一个空列表。在尝试附加到这些子列表之前,您必须将子列表附加到外部列表。迭代 a 时range,无需增加计数器。所以这将起作用:rows = 5cols = 5grid = []for i in range(rows):    grid.append([])    for j in range(cols):        grid[i].append(0)print(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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python