Funktion zum Sortieren nach Popularität

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
unixmelo
User
Beiträge: 4
Registriert: Donnerstag 18. Juni 2020, 16:55

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! :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
unixmelo
User
Beiträge: 4
Registriert: Donnerstag 18. Juni 2020, 16:55

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. :)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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`.
Zuletzt geändert von __blackjack__ am Donnerstag 18. Juni 2020, 17:31, insgesamt 1-mal geändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@unixmelo: Wo/Wie sollen denn eigentlich Programmiersprachen einsortiert werden für die es keinen Eintrag in dem Wörterbuch gibt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
unixmelo
User
Beiträge: 4
Registriert: Donnerstag 18. Juni 2020, 16:55

@__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?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du irrst dich. Lies dir die Dokumentation nochmal durch, und spiel mit meinem Beispiel rum. Muss natürlich dein dictionary existieren, damit das geht.
unixmelo
User
Beiträge: 4
Registriert: Donnerstag 18. Juni 2020, 16:55

Ich komme leider nicht voran. Ich habe keine Idee wie ich die übergebene Liste entsprechend der Dictionary sortiere..
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten