【问题标题】:Add elements in a matrix in python在python中的矩阵中添加元素
【发布时间】:2016-10-10 12:15:33
【问题描述】:

我有这个矩阵:

mat = [[ 0 for x in range(row)] for y in range(column)]

我尝试向矩阵中添加元素:

for x in range(row): # row is 2 
    for y in range(column): # column is 3
        mat[x][y] = int(input("number: "))

但是shell返回这个错误:

Traceback (most recent call last):
File "C:\Users\Fr\Desktop\pr.py", line 13, in <module>
mat[x][y] = 12
IndexError: list assignment index out of range

如何向矩阵添加元素?

【问题讨论】:

  • 为什么不使用 numpy?
  • 我想不用 numpy

标签: python python-3.x matrix


【解决方案1】:

内部列表应该基于列:

mat = [[ 0 for x in range(column)] for y in range(row)]

这是一个例子:

In [73]: row = 3
In [74]: column = 4
In [78]: mat = [[ 0 for x in range(column)] for y in range(row)]

In [79]: 

In [79]: for x in range(row): # row is 2 
             for y in range(column): # column is 3
                 mat[x][y] = 5
   ....:         

In [80]: mat
Out[80]: [[5, 5, 5, 5], [5, 5, 5, 5], [5, 5, 5, 5]]

【讨论】:

  • @FrancescoRastelli 检查示例。
  • @FrancescoRastelli:在这种情况下,发生了一些奇怪的事情,或者您误解了 Kasra 的回答。请将您尝试的完整代码添加到问题的末尾。
  • FWIW,这样做是安全的mat = [[0]*column for y in range(row)];它也更快,更紧凑。 OTOH,我想解释为什么[[0]*column]*row 安全的更容易做到这一点。 :)
  • @Jérôme:请查看Python list of lists, changes reflected across sublists unexpectedly,如果您对此主题仍有疑问,请告诉我。
【解决方案2】:

我认为应该是:

>>> for x in range(column):
...     for y in range(row):
...             mat[x][y] = int("number: ")
...
1
2
3
4
5
6
>>> mat
[[1, 2], [3, 4], [5, 6]]

【讨论】:

  • 那是 3 行 x 2 列。 OP 想要 2 行 x 3 列。
  • @PM2Ring,是的,但是 mat 被认为是错误创建的。矩阵最初=空是这种形式:[[0, 0], [0, 0], [0, 0]] 或者至少这是 OP 创建的......
  • 这就是 OP 问题的原因!根据他们的代码 cmets,他们想要一个 2 行 x 3 列的矩阵,但他们的行和列被调换了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2014-10-14
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
相关资源
最近更新 更多