我刚刚开始使用Python进行编程,但我对2D数组有疑问。我需要从av [1]创建一个具有一定大小的矩阵(禁止使用numpy)并将其保存,以便以后可以与另一个矩阵相乘。对我来说,合乎逻辑的事情是:1-获得av [1]的长度;2-使用ord将av [1] []转换为ASCII等效项,最后3-将其插入到名为key_matrix的列表中。
矩阵必须尽可能小且以“正方形形式”,因此我计算出包含av [1]的len的最小正方形(称为matrix_size),然后像这样初始化我的数组:
key_matrix = [[0] * matrix_size] * matrix_size;
像这样,我得到的方矩阵填充为0。例如,如果matrix_size = 3,我得到:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
现在,奇怪的部分是(以及我卡住的部分)以下内容,我使用
index1 = 0;
index2 = 0;
key_matrix[index1][index2] = ord(sys.argv[1][0]);
print(key_matrix);
仅填充第一行的第一元素。
结果应该是:
[[97, 0, 0], [0, 0, 0], [0, 0, 0]]
我得到:
[[97, 0, 0], [97, 0, 0], [97, 0, 0]]
我和我的朋友们似乎真的无法弄清楚这样做的原因,欢迎任何帮助!
谢谢大家阅读:)
写入时列表的内存地址是相同的[[0] * matrix_size] * matrix_size
,它基本上将第一个[0] * matrix_size
数组的内存地址作为其他列表多次重复使用作为相同的引用。由于这些列表并非从内存地址的角度来看都是独立的,因此仅修改其中一个列表就会产生问题。您可以在下面做为该问题的快速解决方案:
>>> key_matrix2 = [[0] *3 for i in range(matrix_size)]
>>> key_matrix2
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> key_matrix2[0][1] = 2
>>> key_matrix2
[[0, 2, 0], [0, 0, 0], [0, 0, 0]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句