2017-06-13 4 views
0

Ich bin neu in Python (und Kodierung) und dachte, ich hätte ein vernünftiges Verständnis für die Struktur, aber ich habe auf diesem einen stecken. Ich möchte den ersten Wert einer verschachtelten Liste ändern und dann den Wert für die nächste Position in der Liste aktualisieren (z. B. Erstellen von Rasterkoordinaten als verschachtelte Listen).Wert eines Index in einer verschachtelten Liste ändern (Python)

p_d = 3 

passes = 1 
grid = [] 
row = [] 
column = [0, 0, 0] 

while passes <= p_d: 
    row.append(column) 
    grid.append(row) 
    passes += 1 

for i in range(len(row)): 
    column[i] = -(p_d - 1)/2 + i 

print(row) 

Das Ergebnis ist dieses:

[[-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0]] 

Aber was ich wirklich so etwas wie dieses brauchen sollte sein:

[[-1.0, 0, 0], [0.0, 0, 0], [1.0, 0, 0]] 
+0

Nein, es sollte nicht. Sie haben die selbe Liste 'column' an die äußere Liste' row' dreimal angehängt. Sie sollten also erwarten, dieselbe Liste dreimal zu sehen ... –

Antwort

0

Sie hängen das gleiche Listenobjekt an Zeile an, wenn Sie row.append(column) tun, da Spalte nur einmal global erstellt wurde. Wenn Sie also eine einzelne Spalte ändern, werden alle Spalten geändert, da sie das gleiche Listenobjekt sind. Das Gleiche gilt für die Zeilen

Verschieben Sie die Linie column = [0,0,0] und row = [] in der for-Schleife:

p_d = 3 

passes = 1 
grid = [] 

while passes <= p_d: 
    row = [] 
    column = [0, 0, 0] 
    row.append(column) 
    grid.append(row) 
    passes += 1 


for i in range(len(grid)): 
    grid[i][0][0] = -(p_d - 1)/2 + i 

print(grid) 
+0

Sie müssen auch 'row = []' innerhalb der Schleife verschieben, sonst haben Sie das gleiche Problem mit den Zeilen. – BrenBarn

+0

Vielen Dank, spart mir jede Menge Zeit, meinen Kopf gegen die Wand hämmern! – broncosaurus

1

von row.append(column) und grid.append(row) tun, werden Sie die gleiche Zeile setzen und Spalten Objekte in Ihre Matrix mehrmals.

Verschieben Sie stattdessen die Erstellung von Zeile und Spalte (z. B. die Zeilen row = ... und column = ...) innerhalb der Schleife, sodass Sie bei jeder Iteration neue Werte erstellen.

Verwandte Themen