Seite 1 von 1

Werte fest miteinander verbinden

Verfasst: Samstag 3. Juli 2021, 11:02
von redbluegreen
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!

Re: Werte fest miteinander verbinden

Verfasst: Samstag 3. Juli 2021, 13:49
von Sirius3
Hast Du jetzt ein numpy-Array oder eigentlich eine Liste?
Bei Listen ist es besser, wenn Du die Listen transponierst.

Re: Werte fest miteinander verbinden

Verfasst: Samstag 3. Juli 2021, 15:54
von DeaD_EyE
Angenommen, es wird kein Numpy verwendet:

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)
Vorlage zum Transponieren mit regulären Listen:

Code: Alles auswählen

daten = [(1, 2, 3), (10, 20, 30)]
transponiert = list(zip(*daten))

# transponiert = list(zip((1, 2, 3), (10, 20, 30)))

Re: Werte fest miteinander verbinden

Verfasst: Sonntag 4. Juli 2021, 13:12
von redbluegreen
vielen dank