【问题标题】:Adding elements to a matrix in python在python中向矩阵添加元素
【发布时间】:2015-11-11 04:57:59
【问题描述】:
m=int(input("enter the number of rows"))
n=int(input("enter the number of columns"))
mat=[0]
mat=[(mat*n)]*m
for i in range(m):
 for j in range(n):
  print "enter element of ",(i+1)," th row ",(j+1)," th column "
  mat[i][j]=int(input("?"))
  print mat
print mat

我使用此代码输入矩阵,它没有显示任何错误,但在插入所有元素后,当打印矩阵时,2 行是相同的...我在代码中看不到任何错误: -(

输出

enter the number of rows2
enter the number of columns3
enter element of  1  th row  1  th column 
?1
[[1, 0, 0], [1, 0, 0]]
enter element of  1  th row  2  th column 
?2 
[[1, 2, 0], [1, 2, 0]]
enter element of  1  th row  3  th column 
?3
[[1, 2, 3], [1, 2, 3]]
enter element of  2  th row  1  th column 
?4
[[4, 2, 3], [4, 2, 3]]
enter element of  2  th row  2  th column 
?5
[[4, 5, 3], [4, 5, 3]]
enter element of  2  th row  3  th column 
?6
[[4, 5, 6], [4, 5, 6]]
[[4, 5, 6], [4, 5, 6]]

【问题讨论】:

标签: python matrix


【解决方案1】:

这是一个棘手的问题,让我愣了一秒。

此处的这一行复制了对包含mat*n 的匿名对象的引用:

mat=[(mat*n)]*m

因此,当您遍历行时,它会更新每一行中的每个条目,因为它们都是同一个对象

作为证据,使用id() 函数我们可以看到mat 中的两行共享相同的内存!

>>> id(mat[0])
139943023116440
>>> id(mat[1])
139943023116440

相反,考虑使用列表推导来构建您的空矩阵:

>>> mat = [[0]*n for i in range(m)]
>>> mat[1][2] = 5
>>> mat
[[0, 0, 0], [0, 0, 5]]

【讨论】:

  • 看不到任何绿色勾号选项...也许它会在“最短时间”之后出现(这实际上是我第一次在这个网站上抱歉)
  • @AJAYAJITH 我相信他的意思是,如果您接受他的回答,他的帖子下方会出现一个绿色复选标记。
  • 绿色勾上的解释是here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2019-01-08
  • 2014-10-14
相关资源
最近更新 更多