(Python3)在python阵列上存储10x10游戏地图

(Python3)在python阵列上存储10x10游戏地图,python,arrays,python-3.x,2d,Python,Arrays,Python 3.x,2d,如何在2D python3阵列上存储10x10(100个单位)的游戏地图 这是我目前的代码: 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 no

如何在2D python3阵列上存储10x10(100个单位)的游戏地图

这是我目前的代码:

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行,在 索引器:列表索引超出范围“


您需要嵌套的两级循环才能遍历映射。您所拥有的仅在地图对角线上生成块,即您正在为(0,0)、(1,1)、(2,2)生成地图,这也解释了索引超出范围的错误

试试这个

for genX in range(10):
    for genY in range(10):
        worldMap[genX][genY] = randint(1, 12)

因此,从您当前的问题内容来看,我们无法确定您的总体最终目标到底是什么。我将在这样一个假设下工作,即希望用Python表示
nxn
矩阵,并在其中包含某种数字。我将在这个矩阵中填入数字
13
,您可以根据需要对其进行更改

矩阵基本上是行和列,类似这样

13 13 13
13 13 13
13 13 13
这是一个
3x3
矩阵,有3行3列

for row in range(5):
    for column in range(5):
        print(collection_of_13s[row][column])
我可以用集合(列表列表、元组列表、元组列表等)来表示矩阵,其中每个内部集合表示一行

我不会使用您想要的矩阵大小,因为您需要能够计算出来,我将使用
5x5

这就是Python列表术语中的
5x5
矩阵

[[13,13,13,13,13],[13,13,13,13,13],[13,13,13,13],[13,13,13,13],[13,13,13,13]。

要做到这一点,我可以做得更短一些

[[13用于范围(5)中的列]用于范围(5)中的行]

现在,您需要一个矩阵,集合的集合可能有点不必要而且速度慢,让我们尝试在Python中使用这个名为
numpy
的库。您必须从源代码、通过Python代码或pip或其他工具安装它,然后进行查找

假设我有我的旧列表集合,现在我不想使用它,因为它是不必要的,而且看起来有点混乱。我必须用我自己的代码来正确地将其打印成矩阵,对其进行矩阵运算,等等。为什么不使用一些为我包装的东西,比如一个

假设我需要访问第3行和第4列的元素。在我的集合集合中,这意味着我需要获得第三行,然后是其中的第四个元素。这意味着

一系列[3][4]

如果我想遍历所有元素,我将使用@thekingofkings的答案,当然在本例中只有5行5列除外

for row in range(5):
    for column in range(5):
        print(collection_of_13s[row][column])
现在虽然这样做有效,但这不是我想要的。我真正想要的是一个13的网格和我的尺寸。因此,为什么不使用这样的numpy矩阵呢

matrix_of_13s = np.matrix(collection_of_13s)
for element in np.nditer(matrix_of_13s):
    print(element)
它将按行的顺序从左到右遍历矩阵中的每个元素

您还将注意到,随着项目规模的增长,numpy更加高效且易于使用

我还想再提一个选项,这是一个超级简单的概念,您不需要任何集合或numpy集合。只需使用1D数组来表示网格。这个概念实际上用于图像的主成分分析,但这是不相关的

本质上,一个13秒的网格只是一个普通的列表

[13, 13, 13, 13, 13, 13, 13, 13, 13]

任何元素的新索引都将是
(列+1)*(行)
。这有一个数学证明和解释,但我现在不想找到它。lol。

你能在代码上写行号吗?回溯显示第244行,但我们不知道这是哪一部分,因为这只是一个片段。第244行是worldMap[genX][genY]=genIncomingI添加了行号OK如果您想要tldr,请检查我答案的最后一部分。为您提供了一种简单的方法,无需担心多个for循环之类的问题。正如在另一个答案中所说的,您正在增加列和行索引,因此您正在访问对角线中的元素。此外,您的while条件是
而不是worldmap中的13,这总是错误的,因为第一个
worldmap
不会改变,第二个,它包含13个列表,而不是数字13本身。