如何将10x10 (100个单元)游戏地图存储在2D python3数组上?
以下是我的当前代码:
53 worldMap = [[13, 13, 13, 13, 13, 13, 13, 13, 13, 13], [13, 13, 13,
13, 13, 13, 13, 13, 13, 13]]
236 porq = 0
237 genX = 0
238 genY = 0
239
240 #world generator
241 while not 13 in worldMap:
242 porq = porq + 1
243 genIncoming = randint(1, 12)
244 worldMap[genX][genY] = genIncoming
245 genX = genX + 1
246 genY = genY + 1
247 print(worldMap)正在抛出错误:
“回溯(最近一次调用):文件"python",第244行,在IndexError:列表索引超出范围内”
发布于 2018-05-15 04:24:39
您需要嵌套的两级for-循环才能通过映射。您只生成映射对角线上的块,即生成(0,0)、(1,1)、(2,2)、.的映射,这也解释了超出范围误差的索引。
尝尝这个
for genX in range(10):
for genY in range(10):
worldMap[genX][genY] = randint(1, 12)发布于 2018-05-15 04:37:59
因此,从你目前的问题内容来看,我们无法确切地说出你的总体最终目标是什么。我将在这样的假设下工作:您希望用Python表示一个n x n矩阵,并在其中包含一些数字。我将用数字13填充这个矩阵,你可以根据需要修改它。
矩阵基本上是行和列,如下所示
13 13 13
13 13 13
13 13 13这是一个3x3矩阵,有3行3列。
我可以用集合(列表列表、元组列表、元组列表等)来表示矩阵。每个内部集合代表一行。
我不会使用您想要的大小的矩阵,因为您需要能够解决它,我将使用5x5。
这就是5x5矩阵在Python中的样子。
[[13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13], [13, 13, 13, 13, 13]]
为了做到这一点,我可以做一些更短的事情
[[13 for column in range(5)] for row in range(5)]
现在,您需要一个矩阵,集合集合可能有点不必要,而且速度缓慢,让我们尝试在Python中使用这个名为numpy的库。您必须通过Python代码从源代码中安装它,或者通过pip或其他工具查找它。
假设我有我以前的列表集合,现在我不想使用它了,因为它没有必要,也有点让人困惑。我必须用我自己的代码来正确地把它打印成一个矩阵,对它做矩阵运算,等等。为什么不使用一些能为我包装的东西,比如一个numpy矩阵。
import numpy as np
matrix_of_13s = np.matrix([[13 for column in range(5)] for row in range(5)]])假设我需要访问第3行和第4列的元素,在我的集合中,这意味着我需要得到第三行,然后是第四个元素。这意味着
collection_of_13s[3][4]
如果我想运行所有的元素,我将使用@thekingofking的答案,当然,在这种情况下,只有5行5列。
for row in range(5):
for column in range(5):
print(collection_of_13s[row][column])虽然这有用,但这不是我想要的。我真正想要的是一个包含我维度的13s网格。因此,为什么不使用这样的numpy矩阵呢?
matrix_of_13s = np.matrix(collection_of_13s)
for element in np.nditer(matrix_of_13s):
print(element)它将遍历矩阵中的每一个元素,从左到右按行顺序排列。
您还会注意到,随着项目规模的扩大,numpy更高效、更易于使用,有原因。
我还想再提一个选项,这是一个超级简单的概念,您不需要任何集合集合或numpy。只需使用一维数组来表示网格。这个概念实际上用于图像的主成分分析,但这是不相关的。
从本质上说,13s的网格只是一个正常的列表。
[13, 13, 13, 13, 13, 13, 13, 13, 13]任何元素的新索引都是(column +1)*(row)。这有一个数学证明和解释,但我现在不想找到它。
https://stackoverflow.com/questions/50342166
复制相似问题