【问题标题】:How to change one specific element in a matrix?如何更改矩阵中的一个特定元素?
【发布时间】:2017-02-11 05:20:55
【问题描述】:

我已将我的矩阵初始化为 ...

mid_mtx = [ [(0, "")]*len(s2) ]*len(s1)

我后来创建了一个包含两个值 [6, "Middle" ] 的列表,称为 middle_ij_val。

我想用 middle_ij_val 更新 mid_mtx[i][j]。 所以我做到了......

mid_mtx[i][j] = middle_ij_val

但是,这会输出...

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

[(0, ''), [6, 'Middle'], (0, ''), (0, ''), (0, ''), (0, ''), (0, ''), (0, '')]

我将如何对其进行编码,以便如果我执行 mid_mtx[1][1] 它只会更改特定位置?

【问题讨论】:

  • mid_mtx[i][j] = middle_ij_val 在迭代矩阵中所有元素的双 for 循环中。迭代的 row 是外部 for 循环,col 是内部循环。

标签: python list matrix tuples


【解决方案1】:
[[(0, "")] * len(s2)] * len(s1)

上面的表达式创建了一个重复相同元素的列表,而不是不同的项目。所有项目都是同一个项目;更改一项会影响所有。

换句话说,mid_mtx[0] is mid_mtx[1], mid_mtx[0] is mid_mtx[2], .... 或者,id(mid_mtx[0]) == id(mid_mtx[1])id(mid_mtx[0]) == id(mid_mtx[2]),...


[[(0, "") for j in s2] for i in s1]

上面的列表理解将创建一个包含独立项目的列表。

因为最里面的项目是元组(不可变),你可以使用以下代替:

[[(0, "")] * len(s2) for i in s1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2020-04-16
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多