Seite 1 von 1

Liste sortieren

Verfasst: Montag 11. Oktober 2021, 14:14
von RRButon
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

Re: Liste sortieren

Verfasst: Montag 11. Oktober 2021, 14:25
von __blackjack__
@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)

Re: Liste sortieren

Verfasst: Montag 11. Oktober 2021, 19:43
von RRButon
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

Re: Liste sortieren

Verfasst: Montag 11. Oktober 2021, 20:38
von Sirius3
Die Funktion ist ja auch zum Sortieren von Listen und nicht zum Sortieren von Ints gedacht.

Re: Liste sortieren

Verfasst: Montag 11. Oktober 2021, 20:40
von rogerb
@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],
]
"""

Re: Liste sortieren

Verfasst: Montag 11. Oktober 2021, 21:26
von rogerb
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.