Pitone

Comprensioni delle liste in Python

Comprensioni delle liste in Python
Le comprensioni di elenco sono spesso utilizzate in Python per scrivere istruzioni a riga singola che creano un nuovo elenco o dizionario eseguendo un ciclo su un oggetto iterabile. Questo articolo spiegherà come utilizzare la comprensione delle liste in Python, partendo da una spiegazione di base di come funzionano i cicli for in Python.

Ciclo For in Python

Un'istruzione for loop in Python esegue un'iterazione sequenziale sui membri di qualsiasi oggetto, elenco, stringa ecc. Rispetto ad altri linguaggi di programmazione, la sua sintassi è molto più pulita e non richiede la definizione manuale dei passaggi di iterazione e l'avvio dell'iterazione. Sebbene ci siano modi per rendere il suo comportamento uguale ad altri linguaggi di programmazione (non saranno trattati in questo articolo). Puoi anche esercitare un certo controllo sui cicli for usando istruzioni come continue, break, pass ecc. Di seguito è riportato un semplice esempio di ciclo for in Python:

per x nell'intervallo (10):
stampa(x)

Il ciclo for sopra stamperà dieci numeri che iniziano da 0 e terminano a 9.

Comprensioni degli elenchi

La comprensione delle liste non è altro che un modo abbreviato/conciso per scrivere cicli for su più righe in un'istruzione a una riga. L'esempio di comprensione dell'elenco seguente creerà un nuovo elenco come [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] includendo tutti i valori di "x" in esso.

numeri = [x per x nell'intervallo (10)]
stampa (numeri)

Nota che la comprensione delle liste crea sempre una nuova lista e non modifica gli iterabili originali usati nell'espressione. Una tipica espressione di comprensione delle liste deve avere una clausola "for" e può essere seguita da istruzioni condizionali "if" e "else". Senza utilizzare una comprensione di elenco, l'esempio sopra sarà scritto nel modo seguente:

numeri = []
per x nell'intervallo (10):
numeri.append(x)
stampa (numeri)

Prestazioni e leggibilità

La comprensione delle liste è più veloce dei cicli for. Tuttavia, a meno che tu non stia iterando su centinaia di migliaia di elementi, non noterai grandi miglioramenti delle prestazioni. Sebbene la comprensione delle liste fornisca un modo conciso per scrivere cicli for, le espressioni complesse possono portare a una scarsa leggibilità del codice e a una maggiore verbosità. È importante mantenere il codice leggibile, a meno che il raggiungimento delle massime prestazioni non sia una necessità assoluta per il tuo programma.

Esempio: utilizzo della sintassi per la comprensione delle liste con dizionari e insiemi

Un dizionario Python è una raccolta di elementi definiti in coppie chiave-valore mentre un set è una raccolta di valori univoci in cui non sono consentiti duplicati. La comprensione delle liste può essere utilizzata anche con dizionari e set Python. La sintassi è leggermente diversa, invece di racchiudere l'espressione tra parentesi quadre, ora dovrai usare le parentesi graffe. Riceverai anche un nuovo dizionario / set di oggetti invece di un nuovo elenco.

data = "città": "new york", "nome": "john doe"
dati_formati = k: v.title() per k,v in data.elementi()
stampa (formattato_dati)

L'esempio sopra convertirà i valori stringa in maiuscole e minuscole e creerà un nuovo dizionario chiamato "formatted_data", il cui output sarà: 'city': 'New York', 'name': 'John Doe'. Puoi anche cambiare il dizionario / impostare sul posto specificando la variabile del dizionario esistente sul lato sinistro.

data = "città": "new york", "nome": "john doe"
dati = k: v.title() per k,v in data.elementi()
stampa (dati)

Senza usare le comprensioni del dizionario, il codice sarebbe simile a questo:

data = "città": "new york", "nome": "john doe"
dati_formati =
per k, v nei dati.elementi():
dati_formattati[k] = v.titolo()
stampa (formattato_dati)

Poiché non ci sono coppie chiave-valore negli insiemi, una comprensione di insieme può essere definita allo stesso modo di una comprensione di elenco. L'unica differenza è l'uso delle parentesi graffe.

Esempio: più cicli For in una comprensione di elenco

L'esempio di comprensione dell'elenco menzionato sopra è di base e utilizza una singola istruzione "for". Di seguito è riportato un esempio che utilizza più cicli for e un'istruzione "if" condizionale.

aggettivi = ["Disco", "Eoan", "Focale", "Artful"]
animali = ["Dingo", "Ermellino", "Fossa", "Castoro"]
nomi in codice = [x + " " + y per x negli aggettivi per y negli animali se y.inizia con(x[0])]
stampa (nomi in codice)

Il codice mostrerà ['Disco Dingo', 'Eoan Ermine', 'Focal Fossa'] come output. I due cicli for superano le liste “aggettivi” e “animali” e i loro membri vengono uniti utilizzando uno spazio, solo se la prima lettera di entrambe le parole è la stessa. Senza usare la comprensione delle liste, il codice sarebbe simile a questo:

aggettivi = ["Disco", "Eoan", "Focale", "Artful"]
animali = ["Dingo", "Ermellino", "Fossa", "Castoro"]
nomi in codice = []
per x negli aggettivi:
per y negli animali:
se sì.inizia con(x[0]):
nomi in codice.append(x + " " + y)
stampa (nomi in codice)

Esempio: comprensione delle liste con clausola if-else

L'esempio seguente mostrerà l'utilizzo delle istruzioni if ​​e else nella comprensione delle liste.

lista_numero = [1, 2, 3, 4]
altra_lista = [5, 6, 7, 8]
risultato = [Vero  if (x + y) % 2 == 0 altrimenti Falso per x in elenco_numero per y in elenco_altro]
stampa (risultato)

Durante il ciclo attraverso due elenchi, la comprensione dell'elenco sopra controlla se la somma della coppia di elementi è pari o meno. L'esecuzione del codice sopra ti mostrerà [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True] come output. Senza usare la comprensione delle liste, il codice sarebbe simile a questo:

lista_numero = [1, 2, 3, 4]
altra_lista = [5, 6, 7, 8]
risultato = []
per x in number_list:
per y in un altro_elenco:
se (x + y) % 2 == 0:
risultato.append(Vero)
altro:
risultato.append(falso)
stampa (risultato)

Conclusione

La comprensione delle liste fornisce un buon modo per scrivere istruzioni di ciclo chiare e concise. Tuttavia, possono diventare rapidamente complessi e difficili da capire se vengono utilizzati più cicli e istruzioni condizionali. Alla fine, si tratta del livello di comfort di un programmatore, ma generalmente è una buona idea scrivere codice esplicito, leggibile e di facile debug invece di usare eccessivamente le abbreviazioni.

Come cambiare i pulsanti sinistro e destro del mouse su PC Windows 10
È abbastanza normale che tutti i mouse dei computer siano progettati ergonomicamente per gli utenti destrimani. Ma sono disponibili dispositivi mouse ...
Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...
Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...