Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Sort( key=...)

PieMH (2300 points)
3 12 31
in Programmare in python by (2.3k points)
A lezione non ho capito bene come funziona la key nei sort o sorted. Non ho capito come farle capire come ordinare qualcosa, cioè in base a cosa ordina? in base al return della funzione data a key? e key come fa a capire quali sono i parametri giusti da passare alla funzione?? Vi prego se qualcuno ha capito e può spiegarmelo
1.1k views

3 Answers

alessioclemente (19640 points)
19 67 153
by (19.6k points)
Normalmente sort e sorted ordinano in ordine crescente. Però è possibile passare come parametro una funzione, come per esempio una che ritorna la lunghezza della stringa, e il metodo sort ordinerà in base alla lunghezza. I parametri sono i valori della lista.
PieMH (2300 points)
3 12 31
by (2.3k points)
grazie ma comunque non si capisce. Se i parametri della funzione di key non li esplicito come fa a capire cosa prendere, se ci sono due liste ad esempio? se voglio ordinarle solo in base ad una parte della lista, non so mi sembra un qualcosa di anarchico come ragiona la key...
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Beh sort è un metodo che chiami su una lista. Quindi se non passi niente la ordinerò in automatico in ordine crescente
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Non capisco che intendi con "se ci sono 2 liste"
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
La principale differenza tra 'sort' e sorted' è che la prima modifica la lista passata in input mentre la seconda non la modifica.

Nel parametro 'key' puoi inserire una funzione sia essa una funzione in-built come 'len' sia essa una funzione creata da te.

In pratica la lista viene ordinata secondo il criterio definito nella funzione, che:

- per 'len' è l'ordine in base alla lunghezza,

- per una funzione personalizzata applicata ad esempio ad una lista di tuple di 2 elementi, potrebbe essere l'ordinamento secondo in base al secondo elemento della tupla piuttosto che il primo…
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
aggiungo che se non specifichi nulla nella key e nel parametro reverse la stringa verrà ordinata in ordine crescente che per i numeri seguono l'ordine di grandezza per le lettere quello lessicografico.

Nel caso di ordinamento di più liste ad esempio una lista che contiene altre due liste di 2 elementi ciascuna, l'ordinamento avviene NORMALMENTE secondo il primo elemento di ognuna delle due liste… se nel parametro key invece inserisci una funzione che ad esempio restituisce il secondo elemento di una lista passata in input, l'ordinamento avverrà in base al secondo elemento di ogni lista.
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
La funzione che passi come parametro key deve accettare un solo argomento e tornare il valore in base al quale decidere se un elemento viene prima o dopo di un altro .
la funzione sorted la chiamerà una volta per ciascun elemento per ottenere la lista dei valori trasformati.
una volta ordinata questa lista trasformata, i valori originali vengono disposti nel risultato nello stesso ordine