Python中的矩阵问题

我当时正在用Python(2.5.4)编写程序,但我意识到我的代码由于异常而无法正常工作。我将举一个例子:


A = [[0]*2]*2

当我打印A时,我得到:


[[0, 0], [0, 0]]

那没问题。但是现在我想更改第一列中的元素,并触发第一行。所以我输入:


A[0][0] = 1

但是,当我再次打印A时,我得到:


[[1, 0], [1, 0]]

但是,我期待


[[1, 0], [0, 0]]

这毁了我所有的代码。我想知道为什么会这样以及如何解决。


另一方面,当我键入时:


B = [[0,0],[0,0]]

和做:


B[0][0] = 1

我得到:


[[1, 0], [0, 0]]

这甚至是陌生人!两种实现矩阵的方法不是等效的吗?如果我想要一个100x100的零矩阵怎么办?对于这种情况,对于2x2矩阵,我可以键入[[0,0],[0,0]]。但这不是一个好的解决方案。


largeQ
浏览 171回答 2
2回答

慕少森

这是因为您的列表包含对列表的多个引用。>>> a = [0]>>> l = [a,a]>>> l[0][0] = "A">>> l[['A'], ['A']]我们创建一个列表并将其绑定到a。然后咱俩存储引用到a列表中的l通过l=[a,a]。然后,我们操纵一个参考a,它的第一个元素改变"A"。由于引用是指内存中的某个位置,因此我操纵该引用(中的任一元素l)会更改内存中的值,从而影响对的所有其他引用a。此图描述了上面的示例。箭头代表对的引用a。他们是在a“S IN l = [a,a]。当您更改其中之一时,将更改它们都指向的值。这种交互可以这样描述:我们操纵a通过操纵l[0](l[0]为参考a),因为这样就可以改变第一元件中a,通过改变l[0][0](这将是相同的a[0]),以"A"。您的清单的描述[[0]*2]*2如下所示

慕村225694

“如果您想要一个100 x 100的零矩阵怎么办?”使用列表理解:[[0] * 100 for x in range(100)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python