Seite 1 von 1

Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:06
von unixmelo
Hallo liebe Community,

Ich habe folgendes gegeben

Code: Alles auswählen

languages={"Javascript": 1, "Java": 2, "Python": 3, "CSS": 4, "PHP": 5, "Ruby": 6, "C++": 7, "C": 8, "Shell": 9, "C#": 10}
Das ist eine Folge von beliebten Programmiersprachen, welche nach der Popularität sortiert sind.

Weiter soll ich den Algorithmus insertionSort implementieren als in place Algorithmus. Dies habe ich bereits gemacht.

Ich möchte nun eine Funktion implementieren, welche eine übergebene Liste von Programmiersprachen nach der Popularität aufsteigend sortiert. Um zu sortieren soll ich die Datenstruktur dictionary (languages) nutzen.

Bisher habe ich keinen Ansatz wie ich dies umsetzen kann. Ich vermute, dass es vielleicht mit Hashing zutun hat. Ich würde mich freuen wenn mir hierbei jemand helfen kann! :)

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:17
von __deets__
Wie sieht denn dein insertion sort aus?

Das was du da machen musst waere in normalem Python stulle einfach:

Code: Alles auswählen

sorted_languages = sorted(["Javascript", "Java"], key=languages.get)
Nur das ich mal nicht annehme, dass dein insertion-sort eine solche Key-Funktion kennt, oder?

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:19
von unixmelo
Hey __deets__

Mein insertionSort sieht so aus:

Code: Alles auswählen

def insertionSort(L):
    for i in range(1, len(L)):
        val = L[i]
        pos = i
        while ((pos > 0) and (L[pos-1] > val)):
            L[pos] = L[pos-1]
            pos = pos-1
        if pos != i:
            L[pos] = val

    

Eine Key-Funktion habe ich nicht. :)

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:25
von __blackjack__
@unixmelo: Dann bau eine ein. 😎

Edit: Bei der ``while``-Schleife sind alle runden Klammern überflüssig. Weg damit.

Namen schreibt man in Python klein_mit_unterstrichen. Einbuchstabige Namen und Abkürzungen sollte man nicht in oder gar als Namen verwenden. Es gibt seltene Ausnahmen wie `i`, `j`, und `k` für Indexwerte. Aber alles andere dort sollte ordentliche Namen bekommen. `L` beispielsweise `sequence`, `val` wäre `value`, `pos` wäre `position`.

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:26
von __deets__
Aber du koenntest eine einfhueren, und an der Stelle wo du den Vergleich machst, benutzt du die. Und als default-Argument benutzt du einfach 'lambda x: x', womit du dann im Fall ohne key-Funktion einfach den Wert selbst benutzt.

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:47
von __blackjack__
@unixmelo: Wo/Wie sollen denn eigentlich Programmiersprachen einsortiert werden für die es keinen Eintrag in dem Wörterbuch gibt?

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 17:51
von unixmelo
@__blackjack__ Danke für deine Tipps. Das habe ich gleich mal geändert!

@__deets__ Ich weiß ehrlich gesagt nicht was eine Key Funktion ist. Ich habe grade mal ein bisschen nachgeschaut und so wie ich es verstanden habe, soll es eher sort by value sein oder irre ich mich?

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 18:06
von __deets__
Du irrst dich. Lies dir die Dokumentation nochmal durch, und spiel mit meinem Beispiel rum. Muss natürlich dein dictionary existieren, damit das geht.

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 19:49
von unixmelo
Ich komme leider nicht voran. Ich habe keine Idee wie ich die übergebene Liste entsprechend der Dictionary sortiere..

Re: Funktion zum Sortieren nach Popularität

Verfasst: Donnerstag 18. Juni 2020, 20:20
von __deets__
Das Grundprinzip ist ganz einfach: das Kriterium beim Vergleich muss ueber das Dictionary nachgeschlagen werden. Codier das erstmal hart rein, uebergib das dict als Argument, und schlag den Wert nach an der Stelle, wo du vergleichst.