Python possède une multitude de structures de données intégrées et de nombreuses applications sont construites à partir de structures de données intégrées. Ces collections couvrent une variété de situations. Les structures de tuple et de chaîne intégrées sont différentes des structures de liste. Il existe des similitudes importantes entre eux, mais il existe également des différences. Ces structures de données intégrées nous aident à travailler avec les collections de données. Il est difficile de déterminer quelle structure de données convient à un certain scénario.

Comment choisir quelle structure utiliser ? Quelle est la fonction des listes, des ensembles et des dictionnaires ? Pourquoi les tuples et les collections gelées se produisent-ils ?


  1. Les tests d'adhésion sont au centre de la conception du programme, et l'ensemble de valeurs d'entrée valides en est un exemple. Lorsque l'utilisateur saisit le contenu dans la collection, sa saisie est valide ou invalide. 

Les tests d'appartenance simples recommandent d'utiliser des ensembles.

valid_input={"yes","y","no","n"}answer=Nonewhile answer not in valid_inputs:    answer=input("Continue? [y,n]").lower()

Un ensemble conserve les éléments inchangés dans un état sans ordre particulier. Si un élément est membre d'un ensemble, aucun autre élément ne peut être ajouté à l'ensemble.

valid_inputs={"yes","y","no","n"}valid_inputs.add("y")valid_inputs{'no','y','n','yes'}

Nous avons créé un ensemble avec 4 chaînes différentes - valid_inputs. Vous ne pouvez pas ajouter un autre y à un ensemble qui contient déjà y. Le contenu de l'ensemble ne peut pas être modifié.

Notez que l'ordre des éléments de l'ensemble n'est pas exactement l'ordre que nous avons initialement fourni. Un ensemble ne peut maintenir aucun ordre particulier d'éléments, il peut seulement déterminer si un élément existe dans l'ensemble.


2. Est-il possible de représenter des éléments en fonction de leur position dans la collection ? Un exemple pertinent est la ligne dans le fichier d'entrée, où le numéro de ligne est la position de la ligne dans la collection.
Lorsqu'un élément doit être identifié par index ou position, une liste doit être utilisée.
month_name_list=["jan","Feb","Mar","Apr",    "May","Jun","Jul","Aug",    "Sep","Oct","Nov","Dec"]month_name_list[8]"sep"month_name_list.index("Feb")1

Nous avons créé une liste avec 12 éléments de chaîne - month_name_list. Un élément peut être sélectionné en fournissant sa position, et la méthode index() peut être utilisée pour trouver l'index de l'élément dans la liste.

La position des listes en Python commence toujours à 0, et il en va de même pour les tuples et les chaînes.

Si le nombre d'éléments dans l'ensemble est fixe, par exemple trois valeurs pour une couleur RVB, alors il peut être nécessaire d'utiliser un tuple au lieu d'une liste. Si le nombre d'éléments augmente et change, alors une liste est un meilleur choix qu'un tuple.


3. Est-il possible d'identifier un élément dans une collection par sa clé au lieu de sa position ? Les exemples peuvent inclure un mappage entre des chaînes (c'est-à-dire des mots) et des entiers représentant les fréquences de ces mots, ou un mappage entre un nom de couleur et un tuple RVB pour cette couleur.
Un certain type de mappage est recommandé lorsqu'une clé sans position doit être utilisée pour identifier un élément. Le mappage intégré est un dictionnaire (dict). Plus de fonctionnalités peuvent être ajoutées via des extensions.
scheme={"Crimson":(220,14,60),"DarkCyan",(0,139,139),"Yellow":(255,255,00)}scheme['Crimson'](220,14,60)

Nous avons ajouté un mappage des noms de couleurs aux tuples de couleurs RVB dans le schéma du dictionnaire. Lors de l'utilisation d'une clé, telle que "Crimson", la valeur liée à cette clé peut être récupérée.

4. Considérez attentivement les éléments de l'ensemble et la variabilité des clés dans le dictionnaire. Chaque élément de l'ensemble doit être un objet immuable. Les nombres, les chaînes et les tuples sont immuables et peuvent être rassemblés dans des ensembles. Étant donné que les listes, les dictionnaires ou les ensembles sont modifiables, ils ne peuvent pas être utilisés comme éléments d'ensembles. Par exemple, il n'est pas possible de construire un ensemble avec des listes comme éléments.

Au lieu de créer un ensemble avec des listes comme éléments, nous pouvons convertir chaque liste en tuple. Nous pouvons créer des ensembles avec des tuples immuables comme éléments.

De même, les clés de dictionnaire doivent être immuables. Vous pouvez utiliser des nombres, des chaînes ou des tuples comme clés de dictionnaire. Vous ne pouvez pas utiliser de listes, d'ensembles ou d'autres mappages modifiables comme ensembles de dictionnaire.

Chacune des collections intégrées de Python fournit un ensemble unique de fonctions. Ces collections fournissent également de nombreuses fonctionnalités qui se chevauchent, ce qui peut être un défi pour les débutants en Python.

En fait, le module collections.abc fournit une sorte de guide à travers les collections intégrées. Le module collections.abc définit une classe de base abstraite (ABC) qui prend en charge les classes concrètes. Nous verrons ce que ces constructions font par les noms dans cet ensemble de définitions.

Les collections peuvent être divisées en 6 catégories selon les classes de base abstraites.

Ensembles : une caractéristique unique est le test d'appartenance à un élément. Les ensembles ne peuvent pas contenir d'éléments en double.
  • Ensemble mutable : collection d'ensembles.
  • Ensembles immuables : collections frozenset.
Séquences : la caractéristique unique est de fournir des positions d'index pour les éléments.
  • Séquence mutable : une collection de listes.
  • Séquences immuables : collections de tuples.
Cartes : la caractéristique unique est que chaque élément a une clé qui pointe vers une valeur.
  • carte modifiable : collection dict.
  • Cartes immuables : il n'y a pas de cartes figées intégrées.

Les bibliothèques de Python fournissent de nombreuses implémentations supplémentaires de ces types de collections de base.


Le module collections contient de nombreuses variantes des collections intégrées.
  • nommé etuple : Tuple. Chaque élément du tuple peut recevoir un nom. L'utilisation de rgb_color.red est légèrement plus propre que rgb_color[0].
  • deque : file d'attente double. Il s'agit d'une séquence modifiable avec l'optimisation supplémentaire de pousser et de sauter à chaque extrémité. Les listes offrent des fonctionnalités similaires, mais les deques sont plus efficaces.
  • defaultdict : dictionnaire. Des valeurs par défaut peuvent être fournies pour les clés manquantes.
  • Compteur : Dictionnaire. Peut être utilisé pour compter le nombre d'occurrences d'une clé. Parfois appelé multiset ou sac.
  • OrdereDict : Dictionnaire. L'ordre dans lequel les clés ont été créées est conservé.
  • ChainMap : Dictionnaire. Combinez plusieurs dictionnaires en une seule carte.
Il existe de nombreuses autres constructions similaires dans la bibliothèque standard Python. Nous pouvons définir une file d'attente prioritaire en utilisant le module heapq. Le module bisect contient des méthodes pour une recherche très rapide de listes triées, qui peuvent être utilisées avec une performance plus proche de celle d'une recherche rapide dans un dictionnaire.
  • Array : la structure de liste de Python est un tableau typique et offre des performances similaires à une liste chaînée de tableaux.
  • Arbre : les structures arborescentes peuvent être utilisées pour créer des ensembles, des listes ordonnées ou des cartes clé-valeur, et les arbres peuvent être considérés comme une technique de mise en œuvre plutôt qu'une structure de données avec un ensemble unique de fonctionnalités.
  • Hachage : Python utilise des hachages pour implémenter des dictionnaires et des ensembles, qui sont rapides mais gourmands en mémoire.
  • graph : Python n'a pas de structure de données graphique intégrée. Mais la structure du graphe peut facilement être représentée comme un dictionnaire, où chaque nœud a une liste de nœuds adjacents.
Presque n'importe quel type de structure de données peut être implémenté en Python, soit la structure intégrée a les caractéristiques essentielles correspondantes, soit vous pouvez trouver une structure intégrée qui peut être utilisée devant vous.