如何更改矩阵中的一个特定元素?

时间:2017-02-11 05:20:56

标签: python list matrix tuples

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

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

我后来创建了一个包含两个值的列表[6,"中" ]叫做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],它只会更改该特定位置?

1 个答案:

答案 0 :(得分: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]