2 Listen zu einem Array sortieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

Hallo Zusammen,

ich habe eine Frage, die für die meisten vermutlich einfach zu beantworten ist.
Ich möchte aus 2 Listen mit der selben Länge ein array machen

liste1 = [0,1,2,3,4]
Liste2 = [4,6,2,8,7]

zu array: 2 Spalten und 5 Zeilen
anschließend soll das array sortiert werden nach liste 2 dabei sollen die werte in liste 1 auch die Position ändern also:
array:
3 8
4 7
1 6
0 4
2 2

ich hoffe es kann mir jemand helfen.

Viele Grüße
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

z.B. RealPython kann dir helfen :)
Schau dir mal die zip-Funktion an

https://realpython.com/python-zip-function/

Für dein Array stehen mehrere Datentypen zur Verfügung. z.B.: Listen, Tuple, Dictionaries, und Sets. Was davon jetzt genau die richtige Wahl ist, hängt von der Verwendung ab.

Falls du damit Probleme hast, zeigt gerne wie weit du gekommen bist. Den Rest schaffen wir dann zusammen.
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

Ich habe bisher folgendes:

pi_flow = [8,9,2,3,6,1]
indexlist = list(range(len(pi_flow)))
pi_sort = np.array([pi_flow, indexlist])

und dabei habe ich dann ein array mit 2 Zeilen und 6 Spalten ich hätte aber gerne 6 Zeilen und 2 Spalten.
und sortieren will ich das ganze auch noch
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Code: Alles auswählen

In [68]: sorted(zip([0, 1, 2, 3, 4], [4, 6, 2, 8, 7]), key=lambda p: p[1], reverse=True)                                                               
Out[68]: [(3, 8), (4, 7), (1, 6), (0, 4), (2, 2)]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

was ich dabei bekomme ist eine liste mit einem Elemtent "tuple" in welchem 2 listen sind die nicht sortiert sind. habe ich vllt vorher schon was falsch gemacht?
die eine liste sieht so aus: pi_flow = list(np.sum(result_pi_flow_out_line, axis=0)) - eine liste mit 6 Elementen
die 2. liste so: indexlist = list(range(len(pi_flow)))
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

bzw ich bekomme eine liste mit 6 elementen die tuple sind. ich hätte gerne ein array
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eneri_Gnats: __blackjack__ hat Dir doch gezeigt, wie man mit purem Python das Problem löst, wenn die erste Liste immer eine Index-Liste ist, geht das sogar noch einfacher:

Code: Alles auswählen

sorted(enumerate([4, 6, 2, 8, 7]), key=lambda p: p[1], reverse=True)
Wenn Du mit Numpy arbeiten willst, was Du aber bisher nie explizit gefordert hast:

Code: Alles auswählen

data = np.array([4,6,2,8,7])
indices = data.argsort()
sorted_data = np.vstack([indices, data[indices]])
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

ich bin python anfänger darum danke für die verschiedenen Ansätze. Ich habe es jetzt auch ohne numpy (ja das wars was ich gesucht habe) geschafft. Danke Danke :)
Antworten