Competitive Programming Academy · Les

Aangepaste volgorde met functools.cmp_to_key

Een comparator schrijven wanneer sleutels tekortschieten

Les 3 van 413 stappen

Aangepaste volgorde met functools.cmp_to_key is een gratis Competitive Programming Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Competitive Programming Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wanneer een key het niet kan uitdrukken

Sommige volgordes hangen af van het vergelijken van twee items met elkaar, niet van één waarde per item. In zulke gevallen schrijf je een vergelijkingsfunctie in plaats van een key.

Wat een vergelijkingsfunctie teruggeeft

Een vergelijkingsfunctie krijgt twee items, a en b. Geef een negatief getal terug als a eerst komt, een positief getal als b eerst komt en nul als ze gelijk zijn.

def cmp(a, b):
    if a < b: return -1
    if a > b: return 1
    return 0

Verbind ze met cmp_to_key

De sorteerfunctie van Python accepteert alleen een key. Wikkel je vergelijkingsfunctie daarom in functools.cmp_to_key om er een bruikbare key van te maken.

from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))

Het klassieke probleem van het grootste getal

Om getallen samen te voegen tot de grootste tekenreeks, vergelijk je paren op basis van welke concatenatie groter is. Een gewone key kan dit niet uitdrukken.

def cmp(a, b):
    return (a + b < b + a) - (a + b > b + a)

Lees die vergelijkings truc

De expressie geeft -1 terug wanneer a+b de grotere aaneenschakeling is, zodat a vóór b wordt gesorteerd. Zo bouw je het grootst mogelijke getal.

nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums))   # 34330

Alleen het teken telt

Sorteren kijkt alleen naar het teken van het resultaat. -2 of -100 teruggeven werkt hetzelfde als -1, dus maak je geen zorgen over de exacte grootte.

Houd vergelijkingsfuncties consistent

Je vergelijkingsfunctie moet consistent zijn: als a wint van b en b wint van c, moet a ook van c winnen. Tegenstrijdigheden leveren een onzinnige volgorde op.

Geef de voorkeur aan key als dat kan

Een key wordt één keer per item berekend, maar een vergelijkingsfunctie wordt voor veel paren uitgevoerd en is trager. Gebruik cmp_to_key alleen wanneer een key echt niet volstaat.

De verkorte aanpak met aftrekken

Bij numerieke vergelijkingen kun je rechtstreeks a - b teruggeven, omdat het teken de volgorde al vastlegt. Kort en veilig voor gehele getallen.

items.sort(key=cmp_to_key(lambda a, b: a - b))

Let op met kommagetallen

Bij kommagetallen kan a - b afronden naar een heel kleine waarde of nul. Vergelijk met expliciete vertakkingen om onjuiste gelijke waarden te voorkomen.

Vergelijkingsfuncties maken aangepaste volgordes mogelijk

Volgorde van concatenaties, aangepaste rangschikkingen en regelgebaseerde gelijke waarden worden allemaal mogelijk. Een vergelijkingsfunctie is je uitweg voor lastige sorteringen.

Snelle controle

Je vergelijkingsfunctie geeft een negatief getal terug voor cmp(a, b).

Samenvatting

Je kunt een vergelijkingsfunctie met cmp_to_key omwikkelen voor volgordes die een key niet kan uitdrukken. Geef een teken terug, blijf consistent en geef de voorkeur aan keys als dat kan. 🧩

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Aangepaste volgorde met functools.cmp_to_key” gratis?

Ja — de volledige tekst van “Aangepaste volgorde met functools.cmp_to_key” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Competitive Programming Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Competitive Programming Academy bevat in totaal 4 lessen.

Wat leer ik in “Aangepaste volgorde met functools.cmp_to_key”?

Een comparator schrijven wanneer sleutels tekortschieten Je oefent met Competitive Programming Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Competitive Programming Academy te beginnen?

Ervaring vooraf is niet nodig. Competitive Programming Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Aangepaste volgorde met functools.cmp_to_key”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Competitive Programming Academy?

Ja. Elke les over Competitive Programming Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. sorted() en de key-functie
  2. Op meerdere velden sorteren
  3. Aangepaste volgorde met functools.cmp_to_key
  4. Waarom eerst sorteren oplossingen mogelijk maakt
← Terug naar Competitive Programming Academy