2017-06-27 12 views
0

Ich bin im Grunde versucht, um ein Array von Arrays zu wechseln; meine ersten Daten sind:Python wird nicht angehängt, um in for loop zu listet

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 

die ausgegeben werden soll:

[ 
    [0,1], 
    [0,1], 
    [0,1] 
    ] 

aber, was ich bekommen ist:

[] 

i ohne die Schlingen versucht haben, das Gleiche zu tun, aber wenn ich stellen Sie sie vor, es wird einfach nicht anhängen!

siehe Code hier:

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 
transformedArray = [] 
#add rows to transformed 
for j in range(0, len(array) - 1): 
    transformedArray.append([]) 
#for each row 
for i in range(0, len(array[0]) - 1): 
    #for each column 
    for k in range(0, len(array) - 1): 
     transformedArray[i].append(array[k][i]) 

können Sie helfen? Ich habe keine ähnlichen Probleme online gefunden, also vermute ich, ich habe etwas Dummes verpasst!

+1

Heads up, wenn Sie das tun 'Bereich (0, len (array [0]) - 1)' Sie werden nicht jede Zeile durchlaufen, da der Stop-Parameter 'range' * exklusiv * ist. Wie dem auch sei, Sie werden Indexfehler bekommen, glaube ich, weil Sie "Zeilen" und "Spalten" verwirren. –

+0

Die idiomatische Art, eine * transpose * -Operation auszuführen, ist die folgende: 'liste (zip (* array))'. Und solange ich pingelig bin, arbeitest du mit * lists * not * arrays *. –

+0

@ juanpa.arrivillaga Ich habe es nach einer Weile herausgefunden; Ich habe es so lange angeschaut, bis alles in meinem Kopf gemischt ist! – nickthefreak

Antwort

1

Versuchen Sie, Ihre Schleifen nisten:

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 
transformedArray = [[0,0],[0,0],[0,0]] 

# iterate through rows 
for i in range(len(array)): 
    # iterate through columns 
    for j in range(len(array[0])): 
     transformedArray[j][i] = array[i][j] 

for res in transformedArray: 
    print(res) 

kehrt:

[0, 1] 
[0, 1] 
[0, 1] 

Edited Erklärung hinzufügen:

Zuerst werden Listen wie in diesem Code oben definiert: aList = [ ... ], wo ein Array würde definiert werden als anArray = numpy.array([...]), so zu dem Punkt der obigen Kommentare ist dies Liste Verarbeitung in der Frage, nicht wahr Python-Array-Prozess. Als nächstes werden Elemente der Liste nach Index hinzugefügt, so dass es einen Platz geben muss, um sie zu platzieren. Ich habe das gehandhabt, indem ich eine Liste mit 3 bereits vorhandenen Elementen erstellt habe. Der ursprüngliche Beitrag erstellt nur die ersten zwei Zeilen und dann einen Indexfehler, wenn die dritte Zeile erstellt werden soll. Die verschachtelten for-Schleifen durchlaufen dann die eingebetteten Listen.

+0

Ich denke, dass es sich lohnen würde, explizit auf die Bugs hinzuweisen, die Sie hier behoben haben, d. H. Die Off-by-One-Fehler mit den 'stop'-Parametern auf' range'. Nebenbei bemerkt, ist die idiomatische Methode, eine Liste in Python zu transponieren, 'list (zip (* array))'. –

+0

sicher. Zuerst werden Listen wie in diesem Code oben definiert: '' 'aList = [...]' '' wo ein Array als '' 'anArray = Array ([...]) definiert würde' '', so zu der Punkt der obigen Kommentare, das ist Listenverarbeitung in der Frage, nicht wahr Python-Array-Prozess. Als nächstes werden Elemente der Liste nach Index hinzugefügt, so dass es einen Platz geben muss, um sie zu platzieren. Ich habe das gehandhabt, indem ich eine Liste mit 3 bereits vorhandenen Elementen erstellt habe. Der ursprüngliche Beitrag erstellt nur die ersten zwei Zeilen und dann einen Indexfehler, wenn die dritte Zeile erstellt werden soll. Die verschachtelten for-Schleifen durchlaufen dann die eingebetteten Listen. –

+0

Ich meinte in der Frage selbst :) Ich habe mir die Freiheit genommen dies zu deiner Antwort hinzuzufügen. Sie können es bearbeiten/entfernen, wenn Sie es wünschen. –

0

Sie könnten es tun, durch die Abbildung einer Folge von Index-Zugriffsoperationen über alle Arrays:

for i in range(len(array[0])): 
    transformedArray.append(map(lambda x: x[i], array))