我已将矩阵初始化为......
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],它只会更改该特定位置?
答案 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]