Seite 1 von 1

Sortieren in einer Liste

Verfasst: Montag 1. Juni 2020, 15:45
von John Fischer
Guten Mittag,
Ich hab ein Problem beim sortieren einer Liste in einer Liste, es soll nach der länge der strings sortiert werden, ich weiß jedoch nicht was ich ändern muss um zb. nur nach länge des Vorname, Nachname oder der Adresse zu sortieren
L = [' aaa','bb','ddddd','cc' ]
L.sort(key = len)
print(L)

L = [ ['Donald', 'Trump', 77, 'Washington'], ['Simon','Hofer', 63, 'Berlin'], ['Boris', 'Johnson', 49, 'London'] ]

Re: Sortieren in einer Liste

Verfasst: Montag 1. Juni 2020, 17:24
von NPC
Hallo John,

key bekommt das gesame Element (in diesem Fall also die Subliste übergeben).
Du kannst dir das mal ansehen, wenn du z.B. eine dummy Funktion zum Printen nutzt:

Code: Alles auswählen

def show_key(x):
    print(x)
    return 1
Man erhält dann:

Code: Alles auswählen

>>> L.sort(key=show_key)
['Donald', 'Trump', 77, 'Washington']
['Simon', 'Hofer', 63, 'Berlin']
['Boris', 'Johnson', 49, 'London']
Die Lösung ist dann schlicht das entsprechende Element aus der subliste für die len zu verwenden:

Code: Alles auswählen

def sort_len_firstname(x):
    return len(x[0])

L.sort(key=sort_len_firstname)
# oder Kurz
L.sort(key=lambda x: len(x[0]))
Du solltest dir aber überlegen ob eine Liste von Listen hier wirklich die Ideale Lösung ist, wenn du dabei für einzele Personen Nachname, Vorname, ... speichern willst.

Re: Sortieren in einer Liste

Verfasst: Montag 1. Juni 2020, 20:01
von John Fischer
Vielen Vielen Dank, damit ist mir enorm geholfen, ich kann mir leider nicht aussuchen ob ich die Aufgabe so bearbeiten will, das ist ein kleiner Teil einer Langzeitaufgabe die ich bekommen habe

Re: Sortieren in einer Liste

Verfasst: Montag 1. Juni 2020, 20:51
von __blackjack__
@John Fischer: In dem Fall würde man sich am besten Konstanten für die nichtssagenden Indexwerte definieren, damit das lesbar bleibt bei den magischen Zahlen.