我试图创建一个二维矩阵,以便每个单元格包含一个字符串列表。
矩阵维度在创建之前就已经知道了,我需要从一开始就访问任何元素(不动态填充矩阵)。=>;我认为需要某种空间的预分配。
例如,我想要一个2X2矩阵:
[['A','B'] ['C'];
['d'] ['e','f','f']]
支持传统的矩阵访问操作,比如
(Matrix[2][2]).extend('d')
或者
tmp = Matrix[2][2]
tmp.extend('d')
Matrix[2][2] = tmp
操作单元格内容。
如何用python实现?
Tags:
首先,您所描述的实际上是一个三维矩阵,因为每个“细胞”也有一个维度,其
ith
行的jth
列的kth
元素可以通过matrix[i][j][k]
访问。不管怎样,如果要预先分配2X2矩阵,并将每个单元格初始化为空列表,此函数将为您执行以下操作:
不过,您可能会认为它不起作用,因为我注意到您说过您希望有一个2X2矩阵,如下所示:
并能够使用“传统矩阵访问操作”对其执行以下操作:
问题是,即使对于显示的矩阵,这也不起作用,而且对于预先分配到2X2的矩阵,这仍然不起作用,因为在这两种情况下,行和列维度都超出范围。在Python中,所有序列都是从零开始索引的,因此一个包含两行两个元素的矩阵的有效索引分别是
[0][0]
、[0][1]
、[1][0]
和[1][1]
(忽略Python中具有特殊含义的可能的负索引)。因此,使用Matrix[2][2]
是试图访问矩阵的第三行的第三列,该列不存在,甚至在维度为2X2的预分配列中也不存在。如果您使用一对有效的索引值(去掉不必要的括号)将该语句更改为类似这样的语句,一切都会好起来的:
因为它不会引起
IndexError
,而是导致2X2矩阵变成:奖金效用 你没有要求一个,但是我写了一个方便的函数来帮助打印任意大小的任意类型的2D矩阵(表示为嵌套的
lists
):希望这有帮助。
就像你写的:
把2D矩阵看作列表。其他操作也很好,例如
你可以用基本的:
或者你可以做得很一般
在defaultdict的情况下,您可以使用任意矩阵,任何大小和所有元素都是数组,以便进行相应的操作。
相关问题 更多 >
编程相关推荐