Come usare le comprensioni degli elenchi Python (e quando non usarle)

Come usare le comprensioni degli elenchi Python (e quando non usarle) / Programmazione

Potresti aver sentito parlare della comprensione delle liste di Python. Forse è anche qualcosa che hai usato senza veramente capire. Ora è il momento di imparare, poiché copriamo tutto ciò che è necessario sapere sulla comprensione degli elenchi in Python.

Prima di iniziare, vale la pena rinfrescarsi su come funzionano gli array e gli elenchi in Python Come funzionano gli array e gli elenchi in Python Come funzionano gli array e gli elenchi in Python Gli array e gli elenchi sono alcune delle strutture dati più utili nella programmazione, anche se poche persone li usano al loro pieno potenziale. Per saperne di più e come utilizzare i dizionari Python Dizionario Python: Come utilizzarlo per scrivere un dizionario Python migliore del codice: come utilizzarlo per scrivere codice migliore Pensa a un dizionario Python come a insiemi non ordinati di coppie chiave-valore. In questo articolo ti presentiamo per lavorare con loro e usarli per migliorare il tuo codice Python. Leggi di più .

Che cos'è la comprensione dell'elenco Python?

La comprensione delle liste sembra complessa ma in realtà non lo è. In Python, è semplicemente un modo veloce per filtrare o perfezionare un elenco in base ad alcuni criteri.

Ti fa risparmiare dover scrivere diverse righe di codice (specialmente se sei già in loop) e mantiene la leggibilità del tuo codice in ordine.

Fai attenzione, tuttavia, poiché la comprensione delle liste non è sempre la risposta. È facile lasciarsi trasportare e scrivere complesse interpretazioni difficili da leggere. A volte scrivere più codice è meglio, soprattutto se aiuta a migliorare la leggibilità. Attenersi a compiti semplici e mantenere il codice ad una singola responsabilità.

Come usare le comprensioni degli elenchi in Python

Nota: Tutti questi esempi utilizzano Python 3.6. Se non sei sicuro delle differenze tra Python 3 e Python 2, assicurati di leggere le nostre FAQ su Python Le domande più frequenti sulla programmazione Python Le domande più frequenti sulla programmazione Python In questo articolo, ti guideremo attraverso tutto ciò che devi sapere su Python come principiante. Per saperne di più, dove trattiamo questa domanda e altro ancora.

Considera questo bit di codice che copia una matrice e trasforma ogni lettera di quell'array in maiuscolo. Lo fa scorrendo attraverso ogni elemento dell'array:

letters = ['a', 'b', 'c', 'd'] stampa (lettere) upper_letters = [] per lettere in lettere: result = letter.upper () upper_letters.append (risultato) print (upper_letters)

Ora ecco la stessa logica esatta, fatta eccezione per una singola riga di codice che utilizza una comprensione di base degli elenchi di Python:

letters = ['a', 'b', 'c', 'd'] stampa (lettere) upper_letters = [x.upper () per x in lettere] print (upper_letters) 

Come puoi vedere, il risultato è esattamente lo stesso, ma il processo coinvolge molto più codice senza la comprensione delle liste.

Rompiamo questo semplice esempio.

Questo esempio crea una lista chiamata lettere. Questo memorizza le lettere minuscole “un”, “B”, “c”, e “d”. Supponendo che tutti questi elementi della lista siano maiuscoli? Bene, senza la comprensione delle liste, devi creare una nuova lista per memorizzare il risultato (chiamato upper_letters), loop su ogni elemento nel lettere lista, converti ogni lettera (e memorizzala in risultato-opzionale ma buona pratica), e quindi aggiungere la lettera maiuscola alla nuova lista. Quanto lavoro!

La comprensione delle liste qui è quasi esattamente equivalente all'opzione loop. Dice efficacemente “per ogni lettera nell'elenco lettere, convertirli in maiuscolo e restituire il risultato come nuovo elenco.”

La comprensione delle liste può funzionare solo sugli elenchi e deve restituire una nuova lista. Scaviamo più a fondo.

Ci sono tre parti per una comprensione di lista (tratteremo la terza parte sotto). La comprensione delle liste deve iniziare e finire con parentesi quadre ([ e ]). Ecco come è stato progettato e consente a Python di sapere che lavorerai con un elenco.

All'interno delle parentesi quadre, è necessario iniziare con il risultato. Questo è ciò che vuoi fare con ogni elemento dell'elenco.

Nell'esempio sopra, il codice seguente converte ciascun elemento (a cui fa riferimento il nome della variabile X) in maiuscolo usando il superiore() metodo, che fa parte della libreria principale Python:

[x.upper () # non verrà eseguito, solo la metà della comprensione a questo punto

Quindi, devi dire a Python su quale elenco lavorare e assegnare ogni singolo elemento a una variabile. Questo è Esattamente lo stesso del ciclo for nell'esempio a lungo termine:

per x in lettere

Ogni volta che il ciclo passa sopra la lista, il valore di X cambierà in qualunque sia l'elemento corrente. Comincerà come “un”, e poi “B”, e così via.

Se metti tutto insieme (e assegnalo a una variabile chiamata upper_letters), avrai finito:

upper_letters = [x.upper () per x in lettere]

Adesso, upper_letters conterrà una lista di lettere maiuscole, a partire da “UN”, e poi “B” e così via.

La terza parte della comprensione dell'elenco in Python

Come accennato in precedenza, c'è una terza parte per elencare la comprensione.

Una volta completati i due passaggi precedenti, è possibile includere una condizione opzionale. Questo è come usare un Se dichiarazione da dire “fammi un nuovo elenco, basato su questa vecchia lista, ma includo solo elementi che soddisfano i miei criteri”.

Ecco come appare:

età = [1, 34, 5, 7, 3, 57, 356] stampa (età) old_ages = [x per x in età se x> 10] stampa (old_ages)

Questo esempio utilizza una nuova lista chiamata evo. Il old_ages la lista è assemblata usando una lista di comprensione. Il Se condizione alla fine significa che solo gli elementi della lista che soddisfano i criteri sono inseriti nella nuova lista. In questo esempio, sono consentite le età superiori a dieci.

Quando non usare le comprensioni degli elenchi Python

La comprensione delle liste è incredibile una volta che hai capito come funziona, ma non è utile in ogni circostanza. Probabilmente non dovresti usarlo quando hai bisogno di più di una condizione:

old_ages = [x per x in età se x> 10 e x < 100 and x is not None]

Questo codice funziona, ma sta iniziando a diventare lungo e confuso. Allo stesso modo, qualcosa di più di una semplice chiamata di funzione potrebbe non funzionare. In questo esempio, riceverai un errore:

letters = ['a', 'b', 'c', 'd', 2] stampa (lettere) upper_letters = [x.upper () per x in lettere] print (upper_letters)

Questo è un codice perfettamente valido, ma poiché non è possibile scrivere un numero in maiuscolo, non funzionerà. Questo è un caso in cui il loop più lungo è in realtà preferibile, dato che sarai in grado di fare una certa gestione delle eccezioni:

letters = ['a', 'b', 'c', 'd', 1] stampa (lettere) upper_letters = [] per lettera in lettere: prova: result = letter.upper () upper_letters.append (result) tranne AttributeError: pass # do nothing print (upper_letters)

Inizia a mettere le comprensioni della lista Python da usare

Ora che sai quanto è semplice la comprensione delle liste in Python, non c'è ragione di non usarlo. Ricorda semplicemente di mantenerlo semplice e considera la leggibilità sopra ogni altra cosa.

Forse controllerai un Arduino con Python Come programmare e controllare un Arduino con Python Come programmare e controllare un Arduino con Python Purtroppo, è impossibile programmare direttamente un Arduino in Python, ma puoi controllarlo via USB usando un Python programma. Ecco come. Per saperne di più, e che dire di una telecamera di sicurezza di rete Python fai-da-te DIY e Tilt Network Security Cam con Raspberry Pi, fai da te Pan e Tilt Network Security Cam con Raspberry Pi Impara a fare telecamere di sicurezza pan e tilt con un Raspberry Pi. Questo progetto può essere completato in una mattinata con solo le parti più semplici. Leggi di più ?

Scopri di più su: Esercitazioni di codifica, Python.