2017-02-11 4 views
0

ich meine Matrix initialisiert ...Wie ändert man ein bestimmtes Element in einer Matrix?

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

ich eine Liste später erstellt, die zwei Werte halten [6, "Middle"] genannt middle_ij_val.

Ich möchte mid_mtx [i] [j] mit middle_ij_val aktualisieren. so habe ich ...

mid_mtx[i][j] = middle_ij_val 

Dies würde jedoch Ausgang ...

[(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, '')] 

Wie würde ich es Code, so dass, wenn ich mid_mtx tun [1] [1] wird es nur ändern dieser bestimmte Ort nur?

+0

mid_mtx [i] [j] = middle_ij_val ist innerhalb eines doppelten for-Schleife, die alle Elemente in der iteriert Matrix. Iterating-Zeile ist die äußere for-Schleife und col ist die innere Schleife. – lowan

Antwort

1
[[(0, "")] * len(s2)] * len(s1) 

Über dem Ausdruck erstellen Sie eine Liste mit demselben Element wiederholt, anstelle von verschiedenen Elementen. Alle Artikel sind gleiche Artikel; Ändern eines Elements wirkt sich auf alle aus.

Mit anderen Worten, mid_mtx[0] is mid_mtx[1], mid_mtx[0] is mid_mtx[2], .... oder 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] 

oben aufgeführte Liste Begreifen eine Liste mit unabhängigen Elementen erstellen.

Da die Innen die meisten Tupel (unveränderliche) sind, können Sie stattdessen folgende verwenden:

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