Module de collections Python : types de conteneurs avancés

Apprenez à utiliser le module collections de Python. Master Counter, defaultdict, nametuple, deque et comment simplifier des structures de données complexes.

Essayez dans l'éditeur

Aperçu

Alors que les conteneurs de base de Python (listes, dictionnaires, ensembles et tuples) suffisent pour la plupart des tâches, les programmes complexes nécessitent souvent des structures de données spécialisées. Pour résoudre ce problème, Python fournit le module « collections » intégré. Ce module contient des types de données de conteneurs hautes performances conçus pour résoudre les tâches de programmation courantes plus efficacement et avec une syntaxe plus propre et plus auto-documentée.

Parmi les classes les plus utiles se trouve « defaultdict », qui agit comme un dictionnaire normal mais initialise automatiquement les clés manquantes avec une valeur par défaut (comme une liste vide ou un zéro entier), éliminant ainsi le besoin de vérifications détaillées des clés. Un autre moteur puissant est la classe « Counter », spécifiquement optimisée pour compter les occurrences d'éléments dans un itérable. Pour les files d'attente et les piles rapides, `deque` (file d'attente à double extrémité) propose des insertions et des suppressions `O(1)` aux deux extrémités, contrairement aux listes qui souffrent de décalages `O(N)`.

Enfin, le module propose `namedtuple`, qui crée des objets légers de type tuple accessibles en utilisant la notation par points ainsi que les index traditionnels (par exemple, `point.x` au lieu de `point[0]`). Cela vous donne la vitesse et l'immuabilité d'un tuple avec la lisibilité d'une classe. L'intégration du module collections dans votre flux de travail garantit que votre code reste élégant, performant et propre.

Sortie de code et d'exécution

Compter les mots à l'aide de Counter et organiser des groupes de dictionnaires avec defaultdict.

collections_demo.py
Essayez dans l'éditeur
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}")
Sortie terminale
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20

Mise en œuvre étape par étape

  • Analyser les fichiers journaux pour compter les occurrences d'erreurs via Counter
  • Création de files d'attente prioritaires ou de planificateurs de tâches à l'aide de deque
  • Représentation de dimensions de coordonnées ou d'enregistrements de données à l'aide d'un tuple nommé

Foire aux questions

Pourquoi deque est-il plus rapide que list pour les opérations de file d'attente ?

Une liste nécessite de décaler tous les éléments suivants en mémoire lors de l'insertion ou de la suppression depuis le début (O(N)). Un deque est implémenté sous la forme d'une liste doublement chaînée, permettant des opérations O(1) aux deux extrémités.

Puis-je modifier les éléments d’un tuple nommé ?

Non. Puisque les tuples nommés héritent des tuples standard, ils sont totalement immuables. Vous devez utiliser la méthode ._replace() pour renvoyer une nouvelle instance modifiée.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.