Come ordinare gli elenchi in Python

How Sort Lists Python



Questo articolo tratterà una guida sull'ordinamento degli elenchi in Python. Un oggetto elenco Python è una raccolta di uno o più elementi separati da virgole. È un oggetto iterabile e ai suoi elementi è possibile accedere scorrendo l'elenco utilizzando istruzioni di ciclo e altre espressioni. Puoi ordinare un elenco Python usando i metodi sort e sorted, entrambi sono spiegati nell'articolo. Tutti gli esempi di codice in questo articolo sono testati con Python 3.9.5 in Ubuntu 21.04.

Metodo di ordinamento

Il metodo sort ordina un elenco sul posto. In altre parole, modificherà l'oggetto elenco che stai per ordinare e riordinerà il suo elemento. Se non hai bisogno dell'elenco originale e non ti dispiace che l'elenco cambi l'ordine degli elementi sul posto, questo è il metodo più efficiente in Python per ordinare un elenco. Considera questo esempio:







l= [2, 8, 6, 4]

l.ordinare()

Stampa (l)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:



[2, 4, 6, 8]

La prima istruzione nell'esempio di codice definisce un elenco. Successivamente, viene chiamato il metodo sort sull'elenco. Quando stampi l'elenco, puoi vedere che l'ordine dell'elenco originale è stato modificato.



Per impostazione predefinita, Python ordina un elenco in ordine crescente. Se vuoi ordinare un elenco in ordine decrescente, usa il metodo inverso, come mostrato nell'esempio di codice seguente:





l= [2, 8, 6, 4]

l.ordinare()

l.inversione()

Stampa (l)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

[8, 6, 4, 2]

Il metodo inverso modifica anche un elenco Python sul posto senza creare un nuovo elenco.



Se il tuo elenco contiene elementi stringa, chiamando il metodo sort su di esso lo ordinerai in ordine alfabetico dove i simboli e i numeri sono ordinati per primi. Dai un'occhiata all'esempio di codice qui sotto:

l= ['S', 'a', 'Insieme a', '4', '#']

l.ordinare()
Stampa (l)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

['#', '4', 'a', 'S', 'Insieme a']

È inoltre possibile utilizzare il metodo inverso su un elenco contenente elementi stringa.

l= ['S', 'a', 'Insieme a', '4', '#']

l.ordinare()

l.inversione()

Stampa (l)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

['Insieme a', 'S', 'a', '4', '#']

Metodo ordinato

Il metodo ordinato ordina anche un elenco Python, allo stesso modo del metodo sort. Tuttavia, invece di modificare l'elenco originale, restituisce un nuovo elenco in modo che l'elenco originale non venga toccato nel caso in cui desideri riutilizzarlo. Considera il codice qui sotto:

list1= ['S', 'a', 'Insieme a', '4', '#']

lista2= smistato(list1)

Stampa (list1,lista2)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

['S', 'a', 'Insieme a', '4', '#'] ['#', '4', 'a', 'S', 'Insieme a']

Puoi vedere nell'output che list1 è intatto e list2 ora ha elementi ordinati. Puoi anche usare il metodo inverso su list2 per cambiare la sua metodologia di ordinamento.

Argomento inverso

È possibile utilizzare l'argomento reverse come alternativa alla funzione reverse sia nei metodi sort che sort per ottenere un elenco ordinato in ordine decrescente. Basta fornire un valore True per modificare l'ordine di ordinamento:

list1= ['S', 'a', 'Insieme a', '4', '#']

lista2= smistato(list1,inversione=Vero)

Stampa (list1,lista2)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

['S', 'a', 'Insieme a', '4', '#'] ['Insieme a', 'S', 'a', '4', '#']

Utilizzo della funzione chiave per specificare la propria logica per l'ordinamento degli elementi di un elenco

In entrambi i metodi sort e sorted, è possibile specificare un argomento chiave aggiuntivo che accetta una funzione chiamabile come valore. Questo argomento chiave può essere assegnato a una funzione esistente dai moduli Python incorporati oppure puoi fornire la tua funzione con logica personalizzata. Dai un'occhiata all'esempio di codice qui sotto:

list1= ['abcde', 'xyz', 'ijkl']

lista2= smistato(list1,chiave=len)

Stampa (list1,lista2)

lista1.ordinare(chiave=len)

Stampa (list1)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

['abcde', 'xyz', 'ijkl'] ['xyz', 'ijkl', 'abcde']

['xyz', 'ijkl', 'abcde']

L'esempio di codice illustra l'utilizzo dell'argomento chiave in entrambi i metodi ordinati e ordinati. La funzione fornita ad esso si chiama len che determina la lunghezza di un oggetto stringa o di un iterabile. La funzione o il callable dovrebbero originariamente prendere solo un argomento. Lo assegni all'argomento chiave senza usare le parentesi graffe. La funzione chiamabile fornita all'argomento chiave viene chiamata su ciascun elemento dell'elenco. I valori restituiti da questo metodo richiamabile vengono quindi utilizzati come chiave per l'ordinamento dell'elenco. Quindi, fornendo la funzione len all'argomento chiave, gli elementi di un elenco vengono ordinati in base alla loro lunghezza, ovvero dal più corto al più lungo. Come affermato in precedenza, puoi sempre utilizzare il metodo inverso per invertire la metodologia di ordinamento.

Puoi anche utilizzare la tua funzione personalizzata o funzioni lambda a una riga che restituiscono il valore di una singola espressione. Dai un'occhiata all'esempio di codice qui sotto in cui un elenco contiene tuple dell'inventario corrente di cassette di frutta:

list1= [('Mango', 99), ('arancia', 51), ('Banana', 76)]

lista1.ordinare(chiave=lambdainventario: inventario[1])

Stampa (list1)

Dopo aver eseguito l'esempio di codice precedente, dovresti ottenere il seguente output:

[('arancia', 51), ('Banana', 76), ('Mango', 99)]

La funzione lambda viene fornita con un argomento inventory, che è ogni elemento dell'elenco in forma di tupla. Quindi restituisce il secondo elemento di ogni tupla come chiave (all'indice 1). La funzione sort ordina quindi tutte le tuple in base al secondo elemento in ordine crescente. È inoltre possibile utilizzare la funzione inversa o l'argomento inverso sul risultato finale per invertire l'ordine di ordinamento.

Conclusione

Questi sono alcuni modi in cui puoi ordinare il contenuto di un elenco iterabile in Python. L'argomento chiave consente di scrivere la propria logica di ordinamento personalizzata, adatta per applicazioni che potrebbero avere esigenze diverse rispetto ai metodi di ordinamento incorporati.