0Pricing
Coding Interview Prep · Lektion

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 0

Mit 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))   # 34330

Entscheidend 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

  1. sorted() und die key-Funktion
  2. Nach mehreren Feldern sortieren
  3. Benutzerdefinierte Reihenfolge mit functools.cmp_to_key
  4. Warum Sortieren Lösungen ermöglicht
← Zurück zu Coding Interview Prep