Comprensioni di Python: comprensioni di List, Dict e Set

Scrivi Python più pulito e più veloce. Elenco principale, dizionario e comprensioni di set con esempi pratici, condizioni di filtraggio e cicli nidificati.

Prova nell'editor

Panoramica

Le comprensioni sono una delle funzionalità più amate di Python, poiché offrono una sintassi concisa e altamente leggibile per creare nuove raccolte (elenchi, dizionari e set) da iterabili esistenti. Invece di scrivere cicli "for" su più righe e aggiungere manualmente elementi, le comprensioni consentono di eseguire la stessa trasformazione, filtraggio e assegnazione in un'unica riga di codice espressiva.

Le comprensioni delle liste sono la variante più comune, strutturata come "[espressione per l'elemento in condizione iterabile se]". Sotto il cofano, Python ottimizza le comprensioni per funzionare a una velocità vicina a quella del C, spesso surclassando i cicli manuali "for" equivalenti perché il looping è gestito dall'interprete sottostante. Sono ideali per trasformazioni rapide, ad esempio la conversione di un elenco di temperature Celsius in Fahrenheit o l'estrazione di chiavi specifiche da un elenco di record utente.

Oltre agli elenchi, Python supporta le comprensioni di dizionario e set. Una comprensione del dizionario, definita con parentesi graffe e coppie chiave-valore (ad esempio, `{key: value for x in iterable}`), è molto utile per invertire coppie di mappature o analizzare metadati. Le comprensioni degli insiemi generano raccolte uniche rimuovendo automaticamente i duplicati. Sebbene le comprensioni siano incredibilmente potenti, gli sviluppatori dovrebbero evitare di complicarle eccessivamente; se una comprensione richiede cicli annidati o condizioni complesse, un ciclo tradizionale "for" è solitamente più facile da leggere e mantenere.

Codice e output di esecuzione

Dimostra le trasformazioni degli elenchi, il filtraggio condizionale e la creazione di un dizionario dalla mappatura degli input.

comprehensions.py
Prova nell'editor
numbers = [1, 2, 3, 4, 5, 6]

# List comprehension with filter (even squares)
even_squares = [x**2 for x in numbers if x % 2 == 0]

# Set comprehension (unique word lengths)
words = ["python", "java", "ruby", "python"]
word_lengths = {len(w) for w in words}

# Dictionary comprehension (number: square)
square_map = {n: n**2 for n in numbers[:4]}

print(f"Even squares: {even_squares}")
print(f"Unique lengths: {word_lengths}")
print(f"Square mapping: {square_map}")
Uscita terminale
Even squares: [4, 16, 36]
Unique lengths: {4, 6}
Square mapping: {1: 1, 2: 4, 3: 9, 4: 16}

Implementazione passo dopo passo

  • Filtraggio di valori vuoti o dati non validi dai log
  • Mappatura dei payload API in mappature di dati chiave-valore
  • Formattazione rapida delle righe del database in semplici elenchi

Domande frequenti

Le comprensioni sono più veloci dei loop normali?

Sì, nella maggior parte dei casi sono più veloci perché l'iterazione è gestita da codice C ottimizzato all'interno dell'interprete Python.

Dovrei sempre usare le comprensioni?

No. La leggibilità del codice è la priorità di Python. Se la comprensione ha una logica nidificata o è più lunga di una o due righe, è preferibile un ciclo tradizionale.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.