Sortieren von Listen

Code-Stücke können hier veröffentlicht werden.
Antworten
Haryd
User
Beiträge: 8
Registriert: Freitag 20. Oktober 2017, 08:36

Freitag 20. Oktober 2017, 08:51

#!/usr/bin/python

# Personen.txt
# 9,Holger,19641221,Bremen
# 7,Manfred,195340517,Hamburg
# 8,Linus,19661106,Frankfurt
# 6,Zacharias,19630717,Zwickau
# 4,Andreas,19771005,Osnabrück
# 5,Alderus,19630805,Ahlen
# 2,Bertold,19630816,Meppen
# 3,Susi,19680423,Ratenau
# 1,Günter,19850618,Petersburg

# Sortierung nach Spalte 1,2,3,oder 4
# > Aufsteigend oder < Absteigend

sort = 1
liste = []
tempo = []

Eingabe = open("C:\LWD\AAARRRRGGGGHHHHHH\Personen.txt", "r")
for line in Eingabe:
line = line.rstrip()
liste.append(line.split(",", 3))
Eingabe.close()

for IX1 in range(len(liste)):
for IX2 in range(IX1 +1, len(liste)):
if liste[IX1][sort] > liste[IX2][sort]:
tempo = liste[IX2]
del liste[IX2]
liste.insert(IX1,tempo)
__deets__
User
Beiträge: 3512
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 20. Oktober 2017, 08:55

Kommt da noch ne Frage? Und bitte benutz die Code Tags.
Haryd
User
Beiträge: 8
Registriert: Freitag 20. Oktober 2017, 08:36

Freitag 20. Oktober 2017, 08:58

Ja , die Frage:
Die letzten drei Zeilen gefallen mir nicht, gibt es da eine elegantere Methode ?
Sirius3
User
Beiträge: 8438
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 20. Oktober 2017, 09:08

@Haryd: benutze Code-Tags, weil Einrückungen sonst nicht sichtbar sind. Die Frage ist ja, was willst Du machen? Warum programmierst Du einen "Sortieralgorithmus" selbst?

Zum Code: Variablen erst deklarieren, wenn sie wirklich gebraucht werden. Die Zuweisung der leeren Liste an `tempo` wird zum Beispiel nie gebraucht. Es gibt eine Namenskonvention, dass alle Variablennamen grundsätzlich klein geschrieben werden. IX1 und IX2 enthalten kaum mehr Information als i und j. Und dass der Code nicht schön ist, liegt daran, dass der Sortieralgorithmus nicht schön ist, es gibt bessere als welche der Ordnung O(n^3).

Code: Alles auswählen

with open("C:\LWD\AAARRRRGGGGHHHHHH\Personen.txt") as inp:
    liste = [line.strip().split(",", 3) for line in inp]
liste.sort(key=lambda x: x[1])
Haryd
User
Beiträge: 8
Registriert: Freitag 20. Oktober 2017, 08:36

Freitag 20. Oktober 2017, 10:16

@Sirius3 Das mit den Code Tags habe ich übersehen.
Ich beschäftige mich erst seit zwei Wochen mit Python und weiß vieles noch nicht so bei der Sortierung.
Antworten