Hallo liebe Community,
ich habe bisher x-y Koordinaten ein zweidimensionales Array speichern lassen, in die erste Reihe die x Werte und in die zweite Reihe y Werte:
[[0, 1, 5]
[12, 13, 11]].
In diesem Array sind die Reihenwerte mit dem selben Indizes wie beispielsweise (0, 12) oder (5, 11) zusammenhängend und fest, und können nicht verändert werden.
Jetzt habe ich weitere Koordinaten (4, 0) und (6, 10) bekommen, die ich in mein Array nach der Größe des X- Wertes sortiert einspeichern lassen möchte. Am Ende soll mein Array dann so aussehen:
[[0, 1, 4, 5, 6]
[12, 13, 0, 11, 10]]
Gibt es eine Funktion, wo man die zusammengehörige X-Y Werte miteinander verbindet, sodass man nur die X-Werte sortieren muss und die Y-Werte dann automatisch an die richtige Stelle hinzugefügt werden? Oder kommt man um eine Schleife nicht herum?
Vielen Dank schonmal!
Werte fest miteinander verbinden
- DeaD_EyE
- User
- Beiträge: 1206
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Angenommen, es wird kein Numpy verwendet:
Vorlage zum Transponieren mit regulären Listen:
Code: Alles auswählen
from operator import itemgetter
from itertools import chain
d1 = [
[0, 1, 5],
[12, 13, 11],
]
d2 = [
[0, 1, 4, 5, 6],
[12, 13, 0, 11, 10],
]
# einzeln transponieren und dann verketten
# chain mit list konsumieren
# dann konsumiert chain die beiden zip-objekte
chained_t = list(chain(zip(*d1), zip(*d2)))
# sortieren, erst mit element 0, dann 1 usw..
sorted_x_t = sorted(chained_t)
# nach zweitem Element sortieren, also Y
# Zugriff auf chained_t weiterhin möglich, da es als Liste vorliegt
# würde man die list-Funktion auslassen, kann das chain-object nur einmal mit sorted konsumiert werden
# und dann ist es aufgebraucht
sorted_y_t = sorted(chained_t, key=itemgetter(1))
# sortierte Daten wieder transponieren, um zur vorherigen Darstellung zu kommen
sorted_x = list(zip(*sorted_x_t))
sorted_y = list(zip(*sorted_y_t))
print(sorted_x)
print(sorted_y)
Code: Alles auswählen
daten = [(1, 2, 3), (10, 20, 30)]
transponiert = list(zip(*daten))
# transponiert = list(zip((1, 2, 3), (10, 20, 30)))
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server