Brugerdefineret rækkefølge med functools.cmp_to_key
Skriv en comparator, når nøgler ikke er nok
Brugerdefineret rækkefølge med functools.cmp_to_key er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Når en nøgle ikke kan udtrykke det
Nogle rækkefølger afhænger af en sammenligning af to elementer, ikke af én værdi pr. element. I de tilfælde skriver du en sammenligningsfunktion i stedet for en nøgle.
Hvad en sammenligningsfunktion returnerer
En sammenligningsfunktion tager to elementer, a og b. Returnér et negativt tal, hvis a kommer først, et positivt tal, hvis b kommer først, og nul, hvis de er ens.
def cmp(a, b):
if a < b: return -1
if a > b: return 1
return 0Forbind den med cmp_to_key
Pythons sortering accepterer kun en key, så pak din sammenligningsfunktion ind i functools.cmp_to_key for at gøre den til en brugbar key.
from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))Det klassiske største-tal-problem
For at sætte tal sammen til den største streng skal du sammenligne par efter, hvilken sammenkædning der er størst. En almindelig key kan ikke udtrykke dette.
def cmp(a, b):
return (a + b < b + a) - (a + b > b + a)Forstå sammenligningstricket
Udtrykket returnerer -1, når a+b giver den større sammenkædning, så a sorteres før b. Det bygger det størst mulige tal.
nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums)) # 34330Fortegnet er det afgørende
Sorteringen ser kun på resultatets fortegn. At returnere -2 eller -100 fungerer på samme måde som -1, så du behøver ikke bekymre dig om den nøjagtige størrelse.
Hold sammenligningsfunktioner konsekvente
Din sammenligningsfunktion skal være konsekvent: Hvis a slår b, og b slår c, skal a også slå c. Modsigelser giver en meningsløs rækkefølge.
Foretræk key, når det er muligt
En key beregnes én gang pr. element, men en sammenligningsfunktion kører på mange par og er langsommere. Brug kun cmp_to_key, når en key virkelig ikke kan bruges.
Subtraktionsgenvejen
Ved numeriske sammenligninger kan du returnere a - b direkte, fordi fortegnet allerede angiver rækkefølgen. Kort og sikkert for heltal.
items.sort(key=cmp_to_key(lambda a, b: a - b))Pas på flydende tal
Med flydende tal kan a - b afrundes til en meget lille værdi eller nul. Sammenlign med eksplicitte grene for at undgå forkerte ligheder.
Sammenligningsfunktioner åbner for brugerdefinerede rækkefølger
Sammenkædningsrækkefølge, brugerdefinerede rangeringer og regelbaserede ligheder bliver alle mulige. En sammenligningsfunktion er din løsning til vanskelige sorteringer.
Hurtigt tjek
Din sammenligningsfunktion returnerer et negativt tal for cmp(a, b).
Opsummering
Du kan pakke en sammenligningsfunktion ind i cmp_to_key for rækkefølger, som en key ikke kan udtrykke. Returnér et fortegn, vær konsekvent, og foretræk keys, når du kan. 🧩
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “Brugerdefineret rækkefølge med functools.cmp_to_key” gratis?
Ja — hele teksten til “Brugerdefineret rækkefølge med functools.cmp_to_key” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Brugerdefineret rækkefølge med functools.cmp_to_key”?
Skriv en comparator, når nøgler ikke er nok Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Brugerdefineret rækkefølge med functools.cmp_to_key”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- sorted() og key-funktionen
- Sortér efter flere felter
- Brugerdefineret rækkefølge med functools.cmp_to_key
- Hvorfor sortering først åbner for løsninger