Python Elenca sort() con esempi

⚡ Riepilogo intelligente

Python La funzione `list sort()` ordina gli elementi di una lista sul posto, in ordine crescente per impostazione predefinita o decrescente tramite il parametro `reverse`, mentre una funzione chiave opzionale ordina in base a criteri personalizzati come lunghezza, campi della tupla o funzioni definite dall'utente.

  • 🔘 Sintassi: Il metodo sort() accetta parametri opzionali key e reverse e modifica la lista originale senza crearne una copia.
  • ☑️ Controllo degli ordini: Impostando il parametro "reverse" su True, i valori vengono ordinati dal più alto al più basso anziché nell'ordine crescente predefinito.
  • Parametro chiave: Una funzione chiave come `len` ordina gli elementi in base a un valore derivato, ad esempio la lunghezza di una stringa o un campo di una tupla.
  • 🧪 sort vs sorted: Il metodo sort() modifica la lista sul posto e restituisce None, mentre sorted() restituisce una nuova lista mantenendo l'originale.
  • Criteri personalizzati: Le espressioni lambda e le funzioni definite dall'utente consentono alla funzione sort() di ordinare tuple, dizionari e tuple denominate in base a qualsiasi attributo scelto.
  • 🤖 Flussi di lavoro basati sull'intelligenza artificiale: Le pipeline di apprendimento automatico ordinano le previsioni in base al punteggio e selezionano i risultati migliori prima di classificarli o valutarli.

Python Ordinamento elenco()

In cosa consiste il metodo sort() Python?

La funzione sort() in Python Consente di ordinare un elenco in ordine crescente o decrescente. Può essere utilizzato per ordinare elenchi numerici, tuple e elenchi di stringhe. Non crea un elenco separato, ma modifica o ordina quello originale.

Sintassi del metodo Sort in Python

La funzione di ordinamento ha la seguente sintassi:

List.sort(key=…, reverse=…)

La funzione di ordinamento ha due parametri opzionali, ovvero:

  • Tasto: - Viene utilizzato per ordinare una funzione in base a un criterio di ordinamento.
  • Reverse: – accetta il valore come vero o falso. Se vero, questa funzione personalizzata ordina l'elenco in ordine decrescente.

Ordinamento di un elenco in ordine crescente utilizzando il metodo Sort in Python

In Python, la funzione di ordinamento, per impostazione predefinita, ordina qualsiasi elenco in ordine crescente. Un elenco in ordine crescente ha il valore più basso sul lato sinistro e il valore più alto sul lato destro.

Esempio:

Python codice:

base_list=["Google","Reliance","Guru99","Content","Syntax"]
base_list.sort()
print("the base list after sorting is",base_list)

Produzione:

the base list after sorting is ['Content', 'Google', 'Guru99', 'Reliance', 'Syntax']

Code Spiegazione:

  • L'elenco precedente è un elenco di stringhe definito in modo casuale.
  • La funzione di ordinamento di Python aiuta a ordinare l'elenco casuale in ordine crescente, con la lunghezza più bassa della parola sul lato sinistro e la lunghezza più alta sul lato destro.

Ordinamento di un elenco in ordine decrescente

La funzione di ordinamento consente inoltre di ordinare un elenco in ordine decrescente. Può essere definito come l'ordine dove l'elenco inizia con il valore più alto e termina con il valore più basso.

Il parametro inverso della funzione di ordinamento viene assegnato come true per ottenere un elenco ordinato in ordine decrescente.

Consideriamo l'esempio seguente:

Python codice:

base_list=[100,600,400,8000,50]
base_list.sort()
print("the base list after sorting is",base_list)
# Reverse Order
base_list.sort(reverse=True)
print("the base list after REVERSE sorting is",base_list)

Produzione:

the base list after sorting is [50, 100, 400, 600, 8000]
the base list after REVERSE sorting is [8000, 600, 400, 100, 50]

Nota: assicurarsi che l'assegnazione della parola "True" al parametro inverso inizi con la "T" maiuscola per evitare errori in fase di esecuzione.

Ordinamento di un elenco di tuple utilizzando il metodo Sort in Python

Python Le tuple sono raccolte di elementi immutabili che seguono una sequenza ordinata. PythonLa funzione sort di può essere utilizzata per ordinare un elenco di tuple utilizzando una funzione personalizzata e un'espressione lambda.

È possibile creare una funzione personalizzata senza nome, rappresentandola tramite un'espressione lambda. Di seguito è riportata la sintassi per un'espressione lambda:

Sintassi:

Lambda arguments: expression

La sintassi sopra è equivalente al codice Python seguente:

def name (arguments):
return expression

Ecco un esempio di tupla e di funzione personalizzata per illustrare come una funzione di ordinamento con parametri chiave aiuti a ordinare gli elementi in una tupla:

Python codice:

base_list = [('Alto', 2020, 500),('MSFT', 2022, 300),('Guru99', 2019, 1070)]
def get_key(base_list):
    return base_list[2]
base_list.sort(key=get_key,reverse=True)
print("The change in base list is as follows",base_list)

Produzione:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Code Spiegazione:

  • Il parametro reverse è definito come true per ordinare la tupla in ordine decrescente.
  • La funzione personalizzata accetta il secondo elemento della tupla.
  • Questo viene utilizzato come chiave della funzione di ordinamento.

Diamo un'occhiata all'esempio seguente che utilizza l'espressione lambda:

Python codice:

base_list = [('Alto', 2020, 500),
('MSFT', 2022, 300),
('Guru99', 2019, 1070)]
base_list.sort(key=lambda base_list:base_list[2],reverse=True)
print("The change in base list is as follows",base_list)

Produzione:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Spiegazione:

  • L'espressione lambda ti aiuta a ordinare gli elementi della tupla dal più alto al più basso con la chiave come secondo elemento della tupla.
  • Il programma controllerà il valore più alto del secondo elemento della tupla.

Ordinamento degli elementi dell'elenco utilizzando Len come parametro chiave

Len è una funzione integrata che determina la lunghezza dell'elemento. La lunghezza determinata può essere utilizzata per l'indicizzazione nella funzione di ordinamento. Per fare ciò, assegniamo Len al Python parametro chiave della funzione di ordinamento.

Le seguenti Python Il codice illustra come utilizzare la funzione Len con la funzione di ordinamento.

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len)
print("The sorted list based on length:",base_list)

Produzione:

The sorted list based on length: ['Alto', 'Java', 'Guru99', 'Python', 'Google']

Code Spiegazione:

Ordinamento degli elementi dell'elenco utilizzando Len

  • La lunghezza dell'elemento diventa un indice per il parametro chiave per disporre l'elenco in ordine crescente.
  • La funzione Len stima la lunghezza di ciascun elemento presente nella lista base.
  • Mantiene l'elemento più corto sul lato sinistro e l'elemento più grande sul lato destro.
  • Qui, le parole alto e java hanno una lunghezza di 4, che sono disposte per prime nell'elenco, seguite da Guru99, che ha una lunghezza di 6.

Questo esempio illustra il concetto del parametro inverso nella funzione di ordinamento, come mostrato di seguito:

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len,reverse=True)
print("The sorted list based on length:",base_list)

Produzione:

The sorted list based on length: ['Guru99', 'Python', 'Google', 'Alto', 'Java']

Ordinamento degli elementi dell'elenco utilizzando la funzione definita dall'utente come parametro chiave

È possibile utilizzare anche una funzione definita dall'utente come parametro chiave per ordinare un elenco. Ecco un esempio:

Python Code:

base_list = [{'Example':'Python','year':1991},{'Example':'Alto','year':2014},{'Example':'Guru99', 'year':1995},
{'Example':'Google','year':1985},{'Example':'Apple','year':2007},{'Example':'Emails','year':2010},]
def get_year(element):
    return element['year']
base_list.sort(key=get_year)
print("The base list after sorting using explicit criteria",base_list)

Produzione:

The base list after sorting using explicit criteria [{'Example': 'Google', 'year': 1985}, {'Example': 'Python', 'year': 1991}, {'Example': 'Guru99', 'year': 1995}, {'Example': 'Apple', 'year': 2007}, {'Example': 'Emails', 'year': 2010}, {'Example': 'Alto', 'year': 2014}]

Code Spiegazione:

  • Viene creata una funzione definita dall'utente per restituire l'anno
  • Il parametro chiave accetta come criterio una funzione definita dall'utente.
  • La funzione di ordinamento organizzerà l'elenco in ordine crescente in base al valore dell'elemento "anno".

Differenza tra il metodo sort e il metodo sorted in Python

Dopo aver esaminato gli esempi precedenti, è utile confrontare direttamente i due strumenti di ordinamento. Prima di riassumere le differenze, analizziamo la sintassi del metodo Sorted.

Python Sintassi:

sorted (list_name, reverse=…., key=..)

Code Spiegazione:

  • La funzione sorted ordina l'elenco in ordine crescente o decrescente.
  • La funzione accetta tre parametri, di cui due parametri sono di tipo facoltativo e un parametro è del tipo richiesto.
  • Il parametro list_name è obbligatorio quando si utilizza il metodo Sorted.
  • Il metodo Sorted può accettare qualsiasi tipo di elenco iterabile come input.
  • I parametri chiave e i parametri inversi sono parametri facoltativi nel metodo ordinato in Python.

Ecco un esempio di utilizzo della funzione sort e sorted in Python:

Python codice:

#Use of the Sorted method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=sorted(Base_list)
print("the New list using sorted method is",New_list)
#Use of the Sort method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=Base_list.sort()
print("the New list using sort method is",New_list)

Produzione:

the original list is [11, 10, 9, 8, 7, 6]
the new list using the sorted method is [6, 7, 8, 9, 10, 11]
the original list is [11, 10, 9, 8, 7, 6]
the new list using the sort method is None

Code Spiegazione:

  • L'elenco originale viene passato come parametro obbligatorio per la funzione ordinata.
  • Il metodo Sorted restituisce un nuovo elenco oltre all'elenco originale.
  • Poiché al metodo ordinato non vengono passati parametri aggiuntivi, per impostazione predefinita il nuovo elenco viene ordinato in ordine crescente.
  • La funzione di ordinamento non crea alcun nuovo elenco.

Di seguito vengono illustrati i punti chiave relativi a somiglianze e differenze:

Funzione ordinata Funzione di ordinamento
Funzione ordinata in Python è una funzione integrata che accetta nome_elenco come parametro obbligatorio. La funzione di ordinamento non accetta l'elenco originale come parametro.
Il metodo ordinato restituisce un nuovo elenco La funzione di ordinamento non restituisce un nuovo elenco
La funzione ordinata dovrebbe essere utilizzata per gli elenchi iterabili La funzione di ordinamento dovrebbe essere utilizzata per elenchi non iterabili.
Non modifica l'elenco originale e ci consente di conservare i dati originali. La funzione di ordinamento modifica la funzione originale e quindi occupa meno spazio di memoria

Quando utilizzare il metodo ordinato o il metodo di ordinamento?

Prendiamo un esempio che richiede l'ordinamento dei dati di gara. Il programma utilizza il numero di pettorale e il tempo impiegato in secondi per terminare la gara.

Python codice:

from collections import namedtuple
Base = namedtuple('Runner', 'bibnumber duration')
blist = []
blist.append(Base('8567', 1500))
blist.append(Base('5234', 1420))
blist.append(Base('2344', 1600))
blist.append(Base('2342', 1490))
blist.append(Base('23444', 1620))
blist.append(Base('6674', 1906))
print("original list",blist)
blist.sort(key=lambda x: getattr(x, 'duration'))
top_five_result = blist[:5]
print("Results using sort function",top_five_result)
r_blist=sorted(blist,key=lambda x: getattr(x, 'duration'))
top_five_result = r_blist[:5]
print("Results using sorted function",top_five_result)

Produzione:

original list [Runner(bibnumber='8567', duration=1500), Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='23444', duration=1620), Runner(bibnumber='6674', duration=1906)]

Results using sort function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Results using sorted function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Code Spiegazione:

  • L'elenco di base viene ordinato utilizzando sia la funzione di ordinamento che la funzione di ordinamento.
  • L'elenco di base viene perso quando viene applicata la funzione di ordinamento.
  • La funzione di ordinamento non deve essere applicata al set di dati originale. Dovrebbe essere utilizzato quando è disponibile una versione di copia del set di dati originale.
  • La funzione Ordinata mantiene l'elenco originale. Non lo sovrascrive.
  • Ciò offre una soluzione migliore tracFacilità e gestione efficace dei dati.

DOMANDE FREQUENTI

Passa la chiave key=str.lower al metodo sort(), ad esempio names.sort(key=str.lower). Ogni stringa viene confrontata in minuscolo, quindi 'Apple' e 'banana' vengono ordinate alfabeticamente indipendentemente dalla maiuscola/minuscola. La maiuscola/minuscola originale di ogni elemento viene preservata nell'elenco ordinato finale.

L'ordinamento di un elenco di soli numeri o di sole stringhe funziona, ma la combinazione di tipi non correlati come numeri interi e stringhe genera un TypeError, perché Python Non è possibile confrontarli. Convertire prima i valori in un tipo confrontabile oppure passare una funzione chiave che restituisca chiavi confrontabili.

Python Storicamente, l'interprete utilizzava Timsort, un ibrido tra merge sort e insertion sort. Dalla versione 3.11, l'interprete utilizza Powersort, una variante derivata da Timsort con una politica di merge sort più intelligente. Entrambi gli algoritmi sono stabili e, nel caso peggiore, hanno una complessità temporale di O(n log n).

Sì. Il metodo sort() è stabile, quindi gli elementi che risultano uguali mantengono il loro ordine relativo originale. Questo permette di ordinare in base a diversi criteri in più fasi, ordinando prima in base alla chiave meno importante e poi in base alla chiave più importante.

Il metodo sort() ha una complessità temporale di O(n log n) nei casi peggiore e medio. Su dati già perlopiù ordinati, la complessità si avvicina a O(n), poiché l'algoritmo sottostante rileva e riutilizza le sequenze ordinate esistenti anziché riordinarle.

Passa una chiave che converte ciascun elemento durante il confronto, ad esempio nums.sort(key=int). L'elenco verrà quindi ordinato in base al valore numerico anziché al carattere, in modo che '10' venga correttamente ordinato dopo '9'. Gli elementi memorizzati rimangono come stringhe; solo il confronto utilizza il loro valore intero.

L'ordinamento dispone le previsioni in base al punteggio o alla probabilità, seleziona i primi k risultati nei sistemi di classificazione e raccomandazione e ordina i record durante la preparazione dei dati. Le pipeline di machine learning spesso ordinano i valori delle caratteristiche o gli output del modello prima della valutazione, quindi il metodo sort() integrato è una fase di preelaborazione comune.

Sì. GitHub Copilot e gli assistenti AI agentic generano chiamate a sort() e sorted(), incluse funzioni chiave ed espressioni lambda, a partire da un breve commento. Possono rifattorizzare i cicli in singole istruzioni sort, anche se è comunque consigliabile testare l'ordinamento e confermare il risultato nei casi limite.

Riassumi questo post con: