为了账号安全,请及时绑定邮箱和手机立即绑定

Python中的矩阵问题

Python中的矩阵问题

largeQ 2021-03-14 16:23:58
我当时正在用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]]。但这不是一个好的解决方案。
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

这是因为您的列表包含对列表的多个引用。


>>> a = [0]

>>> l = [a,a]

>>> l[0][0] = "A"

>>> l

[['A'], ['A']]

我们创建一个列表并将其绑定到a。然后咱俩存储引用到a列表中的l通过l=[a,a]。然后,我们操纵一个参考a,它的第一个元素改变"A"。由于引用是指内存中的某个位置,因此我操纵该引用(中的任一元素l)会更改内存中的值,从而影响对的所有其他引用a。

//img1.sycdn.imooc.com//605942e10001dfa701410099.jpg

此图描述了上面的示例。箭头代表对的引用a。他们a“S IN l = [a,a]。当您更改其中之一时,将更改它们指向的值。这种交互可以这样描述:

//img1.sycdn.imooc.com//605942f10001688001470101.jpg

我们操纵a通过操纵l[0]l[0]为参考a),因为这样就可以改变第一元件中a,通过改变l[0][0](这将是相同的a[0]),以"A"

您的清单的描述[[0]*2]*2如下所示

//img1.sycdn.imooc.com//6059430000017af502160087.jpg

查看完整回答
反对 回复 2021-03-23
?
慕村225694

TA贡献1880条经验 获得超4个赞

“如果您想要一个100 x 100的零矩阵怎么办?”

使用列表理解:

[[0] * 100 for x in range(100)]


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信