Benutzerdefinierte Reihenfolge mit functools.cmp_to_key
Schreiben Sie einen Comparator, wenn Schlüssel nicht ausreichen
Benutzerdefinierte Reihenfolge mit functools.cmp_to_key ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Wenn ein Schlüssel es nicht ausdrücken kann
Manche Sortierreihenfolgen hängen vom Vergleich zweier Elemente ab, nicht von jeweils einem einzelnen Wert. Dafür schreiben Sie eine Vergleichsfunktion statt eines Schlüssels.
Was eine Vergleichsfunktion zurückgibt
Eine Vergleichsfunktion erhält zwei Elemente a und b. Geben Sie eine negative Zahl zurück, wenn a zuerst kommt, eine positive, wenn b zuerst kommt, und null bei einem Gleichstand.
def cmp(a, b):
if a < b: return -1
if a > b: return 1
return 0Mit cmp_to_key überbrücken
Die Python-Sortierung akzeptiert nur einen Schlüssel. Verpacken Sie Ihre Vergleichsfunktion daher mit functools.cmp_to_key, um daraus einen verwendbaren Schlüssel zu machen.
from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))Das klassische Problem der größten Zahl
Um Zahlen zu einer möglichst großen Zeichenkette zusammenzusetzen, vergleichen Sie Paare danach, welche Verkettung größer ist. Ein gewöhnlicher Schlüssel kann das nicht abbilden.
def cmp(a, b):
return (a + b < b + a) - (a + b > b + a)Den Vergleichstrick verstehen
Der Ausdruck gibt -1 zurück, wenn a+b die größere Verkettung ergibt, also wird a vor b sortiert. So entsteht die größtmögliche Zahl.
nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums)) # 34330Entscheidend ist das Vorzeichen
Die Sortierung berücksichtigt nur das Vorzeichen des Ergebnisses. -2 oder -100 verhalten sich genauso wie -1, daher müssen Sie sich keine Gedanken über den genauen Betrag machen.
Halten Sie Vergleichsfunktionen konsistent
Ihre Vergleichsfunktion muss konsistent sein: Wenn a besser als b und b besser als c ist, muss a auch besser als c sein. Widersprüche führen zu einer fehlerhaften Reihenfolge.
Bevorzugen Sie key, wenn möglich
Ein key wird einmal pro Element berechnet, eine Vergleichsfunktion wird jedoch für viele Paare ausgeführt und ist langsamer. Verwenden Sie cmp_to_key nur, wenn ein key wirklich nicht ausreicht.
Die Abkürzung mit der Subtraktion
Bei numerischen Vergleichen können Sie direkt a - b zurückgeben, da sein Vorzeichen die Reihenfolge bereits festlegt. Kurz und sicher bei Ganzzahlen.
items.sort(key=cmp_to_key(lambda a, b: a - b))Vorsicht bei Gleitkommazahlen
Bei Gleitkommazahlen kann a - b auf einen winzigen Wert oder auf null runden. Vergleichen Sie mit expliziten Verzweigungen, um falsche Gleichstände zu vermeiden.
Vergleichsfunktionen ermöglichen benutzerdefinierte Reihenfolgen
Reihenfolgen für Verkettungen, benutzerdefinierte Ranglisten und regelbasierte Gleichstandsauflösungen werden damit möglich. Eine Vergleichsfunktion ist Ihr Ausweg bei kniffligen Sortierungen.
Kurzer Check
Ihre Vergleichsfunktion gibt für cmp(a, b) eine negative Zahl zurück.
Zusammenfassung
Sie können eine Vergleichsfunktion mit cmp_to_key verpacken, um Reihenfolgen auszudrücken, die ein key nicht darstellen kann. Geben Sie ein Vorzeichen zurück, bleiben Sie konsistent und bevorzugen Sie key, wenn möglich. 🧩
Häufig gestellte Fragen
Ist die Lektion „Benutzerdefinierte Reihenfolge mit functools.cmp_to_key“ kostenlos?
Ja — der vollständige Text von „Benutzerdefinierte Reihenfolge mit functools.cmp_to_key“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzerdefinierte Reihenfolge mit functools.cmp_to_key“?
Schreiben Sie einen Comparator, wenn Schlüssel nicht ausreichen Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Benutzerdefinierte Reihenfolge mit functools.cmp_to_key“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- sorted() und die key-Funktion
- Nach mehreren Feldern sortieren
- Benutzerdefinierte Reihenfolge mit functools.cmp_to_key
- Warum Sortieren Lösungen ermöglicht