Competitive Programming Academy · Lezione

Ordinare per più campi

Gestire i pareggi con chiavi tupla e reverse

Lezione 2 di 413 passaggi

Ordinare per più campi è una lezione Competitive Programming Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Competitive Programming Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Competitive Programming Academy include 4 lezioni in totale.

Quando una sola key non basta

A volte più elementi hanno lo stesso valore nel primo campo e deve risolvere la parità. La soluzione è una tuple key che elenca i campi in ordine di priorità.

Le tuple vengono confrontate da sinistra a destra

Python confronta le tuple elemento per elemento: controlla il primo elemento e guarda il secondo soltanto quando il primo è uguale.

print((1, 9) < (1, 2))   # False
print((1, 2) < (2, 0))   # True

Una tuple key per due campi

Restituisca una tuple dalla sua key per ordinare prima in base al primo campo e poi al secondo. In questo modo ordina le persone per età e poi per nome.

people.sort(key=lambda p: (p.age, p.name))

Ordine primario e secondario

Il campo più a sinistra determina l'ordinamento primario, mentre il successivo risolve le parità. Riordini la tuple per decidere quale campo debba avere la precedenza.

data = [(2, "b"), (1, "z"), (1, "a")]
print(sorted(data))
# [(1, 'a'), (1, 'z'), (2, 'b')]

Combini ordine crescente e decrescente

Per ordinare un campo in modo crescente e un altro in modo decrescente, neghi il campo numerico che vuole ordinare in modo decrescente all'interno della tuple key.

items.sort(key=lambda x: (x.group, -x.score))

Il trucco della negazione richiede numeri

Il trucco del segno meno funziona solo con i numeri. Per invertire un campo di tipo string deve concatenare più ordinamenti invece di negarlo.

L'ordinamento stabile permette di concatenare più ordinamenti

Poiché l'ordinamento è stabile, può ordinare prima in base alla chiave secondaria e poi in base a quella principale, mantenendo corretto l'ordine in caso di parità.

rows.sort(key=lambda r: r.name)
rows.sort(key=lambda r: r.age, reverse=True)

Ordinamenti concatenati o una sola tuple

Una sola tuple key è più veloce e chiara nei casi semplici. Gli ordinamenti concatenati sono utili quando un campo deve essere crescente come stringa e un altro decrescente.

itemgetter per una maggiore velocità

Per le tuple indicizzate, itemgetter è una key ordinata e veloce. Estrae più campi contemporaneamente, rispettando l'ordine di priorità.

from operator import itemgetter
rows.sort(key=itemgetter(1, 0))

I criteri di spareggio rendono l'output deterministico

Aggiungere un ultimo criterio di spareggio univoco, come un id, rende l'output stabile tra un'esecuzione e l'altra, cosa utile ai giudici con verificatori rigorosi.

Pianifichi la key prima di scrivere il codice

Legga il problema e annoti i campi di ordinamento in ordine. Una tuple key chiara trasforma un confronto complesso in una sola riga breve.

Verifica rapida

Vuole ordinare gli studenti per voto crescente e poi per nome crescente.

Riepilogo

Ora può risolvere le parità con una tuple key, negare i numeri per ottenere un ordine decrescente e concatenare ordinamenti stabili per combinare direzioni diverse. I criteri di spareggio mantengono ordinato l'output. ✅

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Ordinare per più campi» è gratuita?

Sì — il testo completo di «Ordinare per più campi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Competitive Programming Academy, passa a CoddyKit PRO. Il corso Competitive Programming Academy include 4 lezioni in totale.

Cosa imparerò in «Ordinare per più campi»?

Gestire i pareggi con chiavi tupla e reverse Eserciti Competitive Programming Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Competitive Programming Academy?

Non è richiesta alcuna esperienza precedente. Competitive Programming Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Ordinare per più campi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Competitive Programming Academy?

Sì. Ogni lezione Competitive Programming Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. sorted() e la funzione key
  2. Ordinare per più campi
  3. Ordine personalizzato con functools.cmp_to_key
  4. Perché ordinare prima sblocca le soluzioni
← Torna a Competitive Programming Academy