Modulo Collezioni Python: Tipi di contenitori avanzati

Impara a usare il modulo delle collezioni di Python. Master Counter, defaultdict, nametuple, deque e come semplificare strutture dati complesse.

Prova nell'editor

Panoramica

Mentre i contenitori di base di Python (elenchi, dizionari, insiemi e tuple) sono sufficienti per la maggior parte delle attività, i programmi complessi spesso richiedono strutture dati specializzate. Per risolvere questo problema, Python fornisce il modulo integrato `collections`. Questo modulo contiene tipi di dati contenitore ad alte prestazioni progettati per risolvere attività di programmazione comuni in modo più efficiente e con una sintassi più pulita e autodocumentata.

Tra le classi più utili c'è `defaultdict`, che funziona come un normale dizionario ma inizializza automaticamente le chiavi mancanti con un valore predefinito (come un elenco vuoto o un numero intero zero), eliminando la necessità di controlli dettagliati delle chiavi. Un'altra centrale elettrica è la classe "Counter", ottimizzata specificatamente per il conteggio delle occorrenze di elementi in un iterabile. Per code e stack veloci, `deque` (coda a doppia estremità) offre inserimenti ed eliminazioni `O(1)` su entrambe le estremità, a differenza delle liste che soffrono di spostamenti `O(N)`.

Infine, il modulo offre `namedtuple`, che crea oggetti leggeri, simili a tuple, a cui è possibile accedere utilizzando la notazione punto e gli indici tradizionali (ad esempio, `point.x` invece di `point[0]`). Questo ti dà la velocità e l'immutabilità di una tupla con la leggibilità di una classe. Incorporare il modulo delle raccolte nel tuo flusso di lavoro garantisce che il tuo codice rimanga elegante, performante e pulito.

Codice e output di esecuzione

Conteggio delle parole utilizzando Counter e organizzazione di gruppi di dizionari con defaultdict.

collections_demo.py
Prova nell'editor
from collections import Counter, defaultdict, namedtuple

# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")

# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")

# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")
Uscita terminale
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20

Implementazione passo dopo passo

  • Analisi dei file di registro per contare le occorrenze di errori tramite Contatore
  • Creazione di code prioritarie o pianificatori di attività utilizzando deque
  • Rappresentazione di dimensioni di coordinate o record di dati utilizzando nametuple

Domande frequenti

Perché la deque è più veloce dell'elenco per le operazioni in coda?

Un elenco richiede lo spostamento di tutti gli elementi successivi in memoria durante l'inserimento o l'eliminazione dalla parte anteriore (O(N)). Una deque viene implementata come una lista doppiamente concatenata, consentendo operazioni O(1) ad entrambe le estremità.

Posso cambiare elementi di una nametuple?

No. Poiché le tuple con nome ereditano dalle tuple standard, sono completamente immutabili. È necessario utilizzare il metodo ._replace() per restituire una nuova istanza modificata.

Argomenti correlati

Risorse Python consigliate

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