Python ordinato ()

La funzione Sort () restituisce un elenco ordinato dagli elementi in un iterabile.

La sorted()funzione ordina gli elementi di un dato iterabile in un ordine specifico ( ascendente o discendente ) e restituisce l'iterabile ordinato come un elenco.

La sintassi della sorted()funzione è:

 ordinato (iterabile, chiave = Nessuno, inverso = Falso)

Parametri per la funzione Sort ()

sorted() può richiedere un massimo di tre parametri:

  • iterabile - Una sequenza (stringa, tupla, elenco) o raccolta (insieme, dizionario, insieme congelato) o qualsiasi altro iteratore.
  • reverse (Opzionale) - Se True, l'elenco ordinato è invertito (o ordinato in ordine decrescente). Il valore predefinito è Falsese non fornito.
  • key (Opzionale) - Una funzione che funge da chiave per il confronto dell'ordinamento. Il valore predefinito è None.

Esempio 1: ordina stringa, elenco e tupla

 # vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))

Produzione

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , "e", "i", "o", "u")

Si noti che in tutti i casi viene restituito un elenco ordinato.

Nota: una lista ha anche il metodo sort () che funziona allo stesso modo di sorted(). L'unica differenza è che il sort()metodo non restituisce alcun valore e modifica l'elenco originale.

Esempio 2: ordina in ordine decrescente

La sorted()funzione accetta un reverseparametro come argomento opzionale.

L'impostazione reverse = Trueordina l'iterabile in ordine decrescente.

 # set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))

Produzione

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'o' , "i", "e", "a")

key Parametro nella funzione Python Sort ()

Se vuoi la tua implementazione per l'ordinamento, sorted()accetta anche una keyfunzione come parametro opzionale.

In base al valore restituito dalla funzione chiave, è possibile ordinare l'iterabile specificato.

 ordinato (iterabile, chiave = len)

Ecco len()la funzione incorporata di Python per contare la lunghezza di un oggetto.

L'elenco è ordinato in base alla lunghezza dell'elemento, dal conteggio più basso al più alto.

Esempio 3: ordina l'elenco utilizzando ordinato () con una funzione chiave

 # take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)

Produzione

 Elenco ordinato: ((4, 1), (2, 2), (1, 3), (3, 4))

Esempio 4: ordinamento con più chiavi

Supponiamo di avere il seguente elenco:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )

Vogliamo ordinare l'elenco in modo tale che lo studente con il punteggio più alto sia all'inizio. Nel caso in cui gli studenti abbiano lo stesso punteggio, devono essere ordinati in modo che il partecipante più giovane venga prima.

Possiamo ottenere questo tipo di ordinamento con più chiavi restituendo una tupla invece di un numero.

È possibile confrontare due tuple confrontando i loro elementi a partire dalla prima. Se c'è un legame (gli elementi sono uguali), il secondo elemento viene confrontato e così via.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Usiamo questa logica per costruire la nostra logica di ordinamento.

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)

Produzione

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Poiché la funzione logica di ordinamento è piccola e rientra in una riga, la lambdafunzione viene utilizzata all'interno keyanziché passare un nome di funzione separato.

Il programma sopra può essere scritto utilizzando la lambdafunzione nel modo seguente:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)

Produzione

 (('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Per saperne di più sulle funzioni lambda, visita Python Lambda Functions.

Articoli interessanti...