Elenco Comprensioni in Python

Elenco Comprensioni in Python
Le comprensioni dell'elenco vengono spesso utilizzate in Python per scrivere dichiarazioni a riga singola che creano un nuovo elenco o un dizionario facendo il giro di un oggetto iterabile. Questo articolo spiegherà come utilizzare le comprensioni dell'elenco in Python, a partire da una spiegazione di base su come funzionano per i loop in Python.

Per loop in Python

Un'istruzione per loop in Python iterate in sequenza su 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 agli altri linguaggi di programmazione (non verrà trattato in questo articolo). Puoi anche esercitare un po 'di controllo per i loop utilizzando dichiarazioni come continuare, rompere, passare ecc. Di seguito è riportato un semplice esempio di Loop in Python:

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

Il loop sopra stamperà dieci numeri a partire da 0 e terminerà a 9.

Comprensioni dell'elenco

La comprensione dell'elenco non è altro che un modo stenografico / conciso per scrivere multiline. L'esempio di comprensione dell'elenco di seguito 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 in gamma (10)]
Stampa (numeri)

Si noti che la comprensione dell'elenco crea sempre un nuovo elenco e non modifica gli iterable originali utilizzati nell'espressione. Un'espressione di comprensione tipica dell'elenco deve avere una clausola "per" e può essere seguita da dichiarazioni condizionali "If" e "else". Senza utilizzare una comprensione dell'elenco, l'esempio sopra verrà scritto nel modo seguente:

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

Prestazioni e leggibilità

Le comprensioni dell'elenco sono più veloci che per i loop. Tuttavia, a meno che tu non stia ripetendo su centinaia di migliaia di articoli, non noterai importanti miglioramenti delle prestazioni. Mentre la comprensione dell'elenco fornisce un modo conciso per scrivere per loop, espressioni complesse possono portare a una scarsa leggibilità del codice e una maggiore verbosità. È importante mantenere il codice leggibile, a meno che il raggiungimento delle prestazioni massime non sia una necessità assoluta per il tuo programma.

Esempio: utilizzando la sintassi di comprensione dell'elenco con dizionari e set

Un dizionario Python è una raccolta di elementi definiti in coppie di valore chiave mentre un set è una raccolta di valori unici in cui i duplicati non sono consentiti. Le comprensioni dell'elenco possono essere utilizzate anche con dizionari e set di Python. La sintassi differisce leggermente, invece di concludere l'espressione in parentesi graffe, ora dovrai usare le parentesi graffe. Otterrai anche un nuovo oggetto di dizionario / set anziché un nuovo elenco.

Data = "City": "New York", "Nome": "John Doe"
formatt_data = k: v.Titolo () per k, v nei dati.elementi()
Stampa (formattato_data)

L'esempio sopra convertirà i valori di stringa in caso di titolo e creerà un nuovo dizionario chiamato "formattato_data", il cui output sarà: "Città": "New York", "Nome": "John Doe". È inoltre possibile modificare il dizionario / set sul posto specificando la variabile del dizionario esistente sul lato sinistro.

Data = "City": "New York", "Nome": "John Doe"
data = k: v.Titolo () per k, v nei dati.elementi()
Stampa (dati)

Senza usare le comprensioni del dizionario, il codice sembrerebbe così:

Data = "City": "New York", "Nome": "John Doe"
formatt_data =
per k, v nei dati.elementi():
Formated_data [k] = v.titolo()
Stampa (formattato_data)

Poiché non ci sono coppie di valore chiave nei set, una comprensione del set può essere definita allo stesso modo della comprensione dell'elenco. L'unica differenza è l'uso delle parentesi graffe.

Esempio: multiplo per i loop in una comprensione dell'elenco

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

aggettivi = ["discote", "eoan", "focal", "artful"]
animali = ["dingo", "ermine", "fossa", "beaver"]
codice di codice = [x + "" + y per x in aggettivi per y negli animali se y.startWith (x [0])]
Stampa (nome in codice)

Il codice mostrerà ["disco dingo", "eoan ermine", "fossa focale"] come output. I due per i loop esaminano gli elenchi di "aggettivi" e "animali" e i loro membri sono uniti usando uno spazio, solo se la prima lettera di entrambe le parole è la stessa. Senza utilizzare le comprensioni dell'elenco, il codice sembrerebbe così:

aggettivi = ["discote", "eoan", "focal", "artful"]
animali = ["dingo", "ermine", "fossa", "beaver"]
codice = []
per x negli aggettivi:
per y negli animali:
Se y.startWith (x [0]):
Codenames.append (x + "" + y)
Stampa (nome in codice)

Esempio: comprensione dell'elenco con la clausola IF-ELSE

L'esempio seguente mostrerà l'utilizzo delle dichiarazioni IF e Else nelle comprensioni dell'elenco.

Number_List = [1, 2, 3, 4]
un altro_list = [5, 6, 7, 8]
risultato = [true if (x + y) % 2 == 0 altro falso per x in numero_list per y in un altro_list]
Stampa (risultato)

Durante il ciclo attraverso due elenchi, la comprensione dell'elenco sopra controlla se la somma della coppia di elementi è uniforme o no. L'esecuzione del codice sopra ti mostrerà [vero, falso, vero, falso, vero, vero, vero, vero, vero, falso, vero, falso, vero, vero, falso, vero] come output. Senza usare la comprensione dell'elenco, il codice sembrerebbe così:

Number_List = [1, 2, 3, 4]
un altro_list = [5, 6, 7, 8]
risultato = []
per x in numero_list:
per y in un altro_list:
if (x + y) % 2 == 0:
risultato.append (vero)
altro:
risultato.append (false)
Stampa (risultato)

Conclusione

Le comprensioni dell'elenco forniscono un bel modo per scrivere dichiarazioni di loop pulite e concise. Tuttavia, possono rapidamente diventare complessi e difficili da capire se vengono utilizzati più loop e dichiarazioni condizionali. Alla fine, si tratta del livello di comfort di un programmatore, ma generalmente è una buona idea scrivere il codice esplicito, leggibile e facile da debug invece di usare eccessivamente le scorciatoie.