首页 > 解决方案 > 如何在python中声明一个每个元素包含两个值的二维数组?另外,请指导我是否有更好的数据结构来做到这一点

问题描述

我想在 python 中声明一个 N*N 2D 数组,其中每个元素本身就是一个 1*2 元素 - 当前迭代值,TRUE

对于 N = 2,2*2 矩阵应如下所示 -

0,TRUE   1,TRUE  2,TRUE
3,TRUE   4,TRUE  5,TRUE
6,TRUE   7,TRUE  8,TRUE

我尝试初始化一个二维数组,然后对其进行迭代并将每个值设置为 [count, TRUE] 但它不起作用。

def some_method(self, N):
     self.N = N
     self.array = [[0 for x in range(self.N)]  for y in range(self.N)]
     self.count = 0
        for i in range(self.N):
            for j in range(0,i+1):
                self.array[i][j] = [self.count, False]
                self.count = self.count + 1

N = 2-的输出

[[[0, TRUE], 0], [[1, TRUE], [2, TRUE]]]

所需输出 -

[[[0,TRUE],[1,TRUE],[2,TRUE]], [[3,TRUE],[4,TRUE],[5,TRUE]], [[6,TRUE],[7,TRUE],[8,TRUE]]]

也请让我知道是否有更好的方法来存储和访问此类数据

标签: pythonpython-3.xmultidimensional-array

解决方案


你想多了。这将简单地产生您想要的输出:

self.array = [[[0, True] for x in range(self.N)] for y in range(self.N)]

它创建一个x-length 列表,其中每个元素是[0, True],然后创建一个y-length 列表,其中每个元素是x-length 列表。

除此之外,您的迭代也已关闭。当你这样做时for j in range(0,i+1):,你是在迭代相对于i你首先计数的。如果要命中矩阵的每个元素,则需要独立地遍历轴:

self.array = [[0 for x in range(self.N)]  for y in range(self.N)]
self.count = 0
for i in range(self.N):  # you could also use range(len(self.array)), since the length of self.array will be self.N
    for j in range(self.N):  # you could also use range(len(self.array[i])), since the length of the ith row of self.array will be self.N
        self.array[i][j] = [self.count, False]
        self.count += 1

推荐阅读