python - 如何在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]]]
也请让我知道是否有更好的方法来存储和访问此类数据
解决方案
你想多了。这将简单地产生您想要的输出:
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
推荐阅读
- javascript - 重构此代码的有效方法是什么?
- hibernate - 根据列值使用不同的序列生成主键
- mysql - mysql中的累积和列 - 设置功能不起作用
- reactjs - this.setState 第二个参数带有一个 setTimeout
- html - 我的 Internet 浏览器每次都会自动打开和关闭 HTML 侧边栏。我怎样才能阻止它,发生了什么?
- gitlab-ci - Gitlab-ci:将一个仓库从 Gitlab 推送到 Gitlab Runner 主机?
- python - 如何使用 shell 命令按应用程序名称查找 PID
- python - 剪刀石头布游戏玩家2输入错误
- windows - 使用批处理脚本在文本文件中使用文件夹列表将只需要的文件夹复制到目标文件夹
- r - 用第二个数据帧中的相同行名替换第一个数据帧中的行