Python中使用for循环的二维网格
我想用python中的for循环创建一个2D网格。我可以编写如下简单代码:Python中使用for循环的二维网格,python,arrays,Python,Arrays,我想用python中的for循环创建一个2D网格。我可以编写如下简单代码: cols = 10 rows = 10 grid = [[0 for x in range(cols)] for y in range(rows)] print(grid) cols = 10 rows = 10 grid = [[0 for x in range(cols)] for y in range(rows)] for i in range(rows): for j in range(cols):
cols = 10
rows = 10
grid = [[0 for x in range(cols)] for y in range(rows)]
print(grid)
cols = 10
rows = 10
grid = [[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])
但当我尝试在行中循环I,然后在列中循环j时,会显示错误:列表索引超出范围。不确定我的编码哪里出了问题
rows = 10
cols = 10
i = 0
for i in range(rows):
for j in range(cols):
grid[i].append([j])
i += 1
您的问题在于内部循环的增量:
for i in range(rows):
for j in range(cols):
grid[i].append([j])
i += 1 # BAD!!
内环增加i
10倍,使其超出范围。摆脱那句话,你可能会得到你想要的。考虑到这种奇怪的编程风格,我不太确定您的构造应该做什么。如果没有多余的增量,您会将单个元素列表附加到原始的十个零:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]]
您希望元素仅为0-9吗?为此:
grid = [list(range(10)) for _ in range(10)]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
您将递增
i
两次。
对于范围(行)中的i,第一次使用,第二次使用i+=1
。
删除第二条语句,使其如下所示:
cols = 10
rows = 10
grid = [[0 for x in range(cols)] for y in range(rows)]
print(grid)
cols = 10
rows = 10
grid = [[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)
有几个问题:
在循环之前,您不会实例化一个空的网格列表
在尝试附加到那些子列表之前,必须将子列表附加到外部列表
在范围内迭代时,不需要增加计数器
因此,这将起作用:
rows = 5
cols = 5
grid = []
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]]
在使用类似于grid[i].append()的内容之前,需要创建一个空的子列表。因为最初列表中没有任何内容,而您引用了一些不可用的内容。因此,你的错误是:(
您可以在每个外部迭代中创建一个子列表,并将0
附加到内部迭代中的前一个子列表中:
cols = 10
rows = 10
grid = []
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]]
[[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]]我尝试使用for循环获得与第一个循环相同的结果。为什么要尝试将更多列表附加到grid
的子列表中?为什么要在内部循环中递增I
?如果要重新创建第一个代码的输出,则可以从定义为空列表的网格开始。当获得解析时注意,请记住投票选出有用的东西并接受你最喜欢的答案(即使你必须自己写),因此堆栈溢出可以正确地存档问题。这已经足够好了。我只需要一个基于文本的游戏板。数字不重要。谢谢!谢谢,非常有用!这很酷!但我不确定我是否理解u如何工作?以及为什么行从-1开始?@user10381476,\uu
就像一个一次性变量。你不需要Iterator,所以一个\uu
就足够了。-1
将获得列表的最后一个子列表,以便您可以附加到最后一个子列表。