Python Arrayumformen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gaberchen
User
Beiträge: 9
Registriert: Donnerstag 21. März 2013, 15:30

Hallo,

ich habe folgende Daten als 1 Spaltenvektor
a=(0,0,0,1,2,3,4,0,1,2,0,4,5,6) transponiert!

Nun würde ich gerne mit einer for Schleife die einzelnen Zeilen des Vektors durchgehen und für die Nulleinträge immer eine neue Spalte erzeugen, sowie für die nicht Null Einträge ebenfalls angehängt. Als Ergebnis sollte es

Matrixlist
0 1 0 1 0 4
0 2 - 2 - 5
0 3 - - - -6
- 4 - - - -

ergeben.
Da ich dabei bin erst Python zu lernen fehlt es mir einfach an der Syntax, die Logik ist mir relativ klar. Hätte jemand vielleicht ein ähnliches Beispiel dazu?
Zuletzt geändert von gaberchen am Mittwoch 12. März 2014, 15:28, insgesamt 2-mal geändert.
BlackJack

@gaberchen: Was Du hier als Array sollen wahrscheinlich Listen sein. Und Dein Spaltenvektor ist ein Tupel so wie im ersten Beitrag steht.

Ich sehe aus der Beschreibung nicht nach welcher Logik sich das Ergebnis aufbaut. Wenn Du das präziser beschreiben könntest, wärst Du sicher auch in der Lage das in Quelltext auszudrücken.

Wenn es an der Syntax und den Operationen bezüglich Listen fehlt, dann arbeite am besten mal das Tutorial in der Python-Dokumentation durch und schau welche Methoden und Operationen Listen bieten.
BlackJack

@gaberchen: Nach dem Du den Beitrag bearbeitet hast ist klarer wie das Ergebnis zustande kommt. Da würde ich `itertools.groupby()` und `itertools.izip_longest()` zum Transponieren verwenden.

Code: Alles auswählen

In [20]: a
Out[20]: (0, 0, 0, 1, 2, 3, 4, 0, 1, 2, 0, 4, 5, 6)

In [21]: list(izip_longest(*(list(g) for _, g in groupby(a, bool))))
Out[21]: 
[(0, 1, 0, 1, 0, 4),
 (0, 2, None, 2, None, 5),
 (0, 3, None, None, None, 6),
 (None, 4, None, None, None, None)]
Antworten