Forberedelse til kodeinterviews · Lektion

Brugerdefineret rækkefølge med functools.cmp_to_key

Skriv en comparator, når nøgler ikke er nok

Lektion 3 af 413 trin

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 0

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

Fortegnet 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. 🧩

Gratis at komme i gang

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

  1. sorted() og key-funktionen
  2. Sortér efter flere felter
  3. Brugerdefineret rækkefølge med functools.cmp_to_key
  4. Hvorfor sortering først åbner for løsninger
← Tilbage til Forberedelse til kodeinterviews