Liste sortieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RRButon
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2021, 15:17

Hallo Zusammen

Ich habe folgende Aufgabe erhalten:
Schreiben Sie eine Funktion sort_list_of_lists(liste, n, asc), die eine Liste von Listen sortiert.
Das Argument n besage, dass die Elementlisten nach dem n-ten Element sortiert werden sollten.
asc sein ein optionaler Parameter, das die Werte true und false annehme; true bedeutet aufsteigend zu sortieren, false absteigend; falls der Parameter weggelassen wird, soll aufsteigend sortiert werden.

Eine einfache Sortierung funktioniert ohne Probleme:

Code: Alles auswählen

def sort_list_of_lists(liste):
    eingabe = liste[:]
    eingabe.sort()
    print(eingabe)

Code: Alles auswählen

sort_list_of_lists([33,11,5,65])
Ausgabe:

Code: Alles auswählen

[5, 11, 33, 65]
Was ich aber nicht zustande bekomme, dass die anderen Werte ausgeführt werden. Die Funktion sollte am Schluss ungefähr so aussehen:

Code: Alles auswählen

def sort_list_of_lists(liste, n, asc):
    eingabe = liste[:]
    eingabe.sort()
    print(eingabe)
Kann mir ev. jemand helfen, wie ich dies hinkriege?

Vielen Dank und Gruss
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@RRButon: Die Aufgabe klingt eher so als sollte die Liste sortiert werden und keine sortierte Kopie zurückgegeben werden. Also ist das kopieren mittels Slice-Notation nicht nötig, beziegungsweise sogar falsch. Ausserdem hat das `print()` in der Sortierfunktion nichts zu suchen.

Ungetestet:

Code: Alles auswählen

from operator import itemgetter


def sort_list_of_lists(items, index, ascending=True):
    items.sort(key=itemgetter(index), reverse=not ascending)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
RRButon
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2021, 15:17

Leider bekomme ich dort auch immer nur Fehlermeldungen bei der Ausgabe. Beim index bekomme ich immer die Rückmeldung: TypeError: 'int' object is not subscriptable
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Funktion ist ja auch zum Sortieren von Listen und nicht zum Sortieren von Ints gedacht.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@RRButon,

die Aufgabe ist ja eine Liste von Listen zu sortieren. Das kann nur funktionieren, wenn du auch eine Liste von Listen an die Funktion übergibts:

Code: Alles auswählen

from operator import itemgetter

liste = [
    [3, 10, 9],
    [2, 7, 6],
    [1, 2, 4],
    [3, 8, 4],
    [2, 2, 5],
    [9, 2, 1],
    [5, 5, 6],
    [7, 0, 3],
    [8, 9, 10],
    [1, 7, 7],
]


def sort_list_of_lists(items, index, ascending=True):
    items.sort(key=itemgetter(index, index + 1), reverse=not ascending)


sort_list_of_lists(liste, 1, True)
Jetzt ist liste eine Liste von 10 Listen zu jeweils 3 Elementen. In diesem Fall wird die Reihenfolge der 10 Listen nach Element 1 der einzelnen Listen sortiert

Code: Alles auswählen

"""
Ausgabe:
[
    [7, 0, 3],
    [9, 2, 1],
    [1, 2, 4],
    [2, 2, 5],
    [5, 5, 6],
    [2, 7, 6],
    [1, 7, 7],
    [3, 8, 4],
    [8, 9, 10],
    [3, 10, 9],
]
"""
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Edit: Ich sehe gerade, dass da ein index + 1 reingerutscht ist. Das sollte da eigentlich nicht rein:

Code: Alles auswählen

def sort_list_of_lists(items, index, ascending=True):
    items.sort(key=itemgetter(index), reverse=not ascending)
Das zweite Argument von itemgetter, wäre ein sekundärer Index nach dem sortiert wird.
Antworten