2017-02-11 92 views
0

我已经初始化我的矩阵...如何更改矩阵中的一个特定元素?

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

后来我创建了一个名为middle_ij_val把两个值列表[6,“中”。

我想用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]它只会改变只有特定的地方?

+0

mid_mtx [i] [j] = middle_ij_val是内双for循环迭代的所有元素在矩阵。迭代行是外循环,col是内循环。 – lowan

回答

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] 
相关问题