Structures de données
Progression
#Structures de données
Le choix de la structure de données appropriée est crucial pour modéliser efficacement votre problème et écrire un code à la fois lisible et performant. Python offre quatre structures de données principales, chacune avec ses caractéristiques propres en termes de mutabilité, d'ordre, d'unicité et de complexité des opérations : les listes, les tuples, les dictionnaires et les ensembles. Comprendre les forces et les faiblesses de chacune vous permettra de faire des choix éclairés dans vos programmes.
1fruits = ['pomme','banane']2prix = {'pomme': 1.2, 'banane': 2.0}3print(len(fruits), prix['pomme'])#Listes
Les listes en Python sont des structures de données mutables et ordonnées qui constituent l'un des types les plus utilisés du langage. Elles permettent de stocker des séquences d'éléments que l'on peut modifier après leur création. Les opérations courantes incluent append() pour ajouter un élément à la fin, pop() pour retirer et retourner un élément, et sort() pour trier la liste en place. Les slices permettent d'extraire des sous-séquences de manière élégante. Les listes sont particulièrement adaptées aux séquences modifiables et aux parcours séquentiels. Toutefois, il convient de noter que les insertions en début de liste sont coûteuses en performance, car elles nécessitent de décaler tous les éléments existants.
1a = [3,1,2]2a.append(4)3a.sort()4print(a, a[1:])#Dictionnaires
Les dictionnaires sont des structures associatives qui établissent une correspondance entre des clés et des valeurs, implémentées sous forme de tables de hachage. Cette architecture leur confère des performances exceptionnelles pour les recherches par clé. Pour parcourir un dictionnaire, on dispose de trois méthodes principales : .items() retourne des paires clé-valeur, .keys() retourne les clés, et .values() retourne les valeurs. Une contrainte importante est que les clés doivent être immuables et hashables, ce qui exclut les listes mais permet les chaînes, les nombres et les tuples. Les dictionnaires constituent le choix idéal lorsque vous devez associer des données et y accéder rapidement par une clé identifiante.
1prix = {'pomme': 1.2, 'banane': 2.0}2for fruit, p in prix.items():3 print(fruit, p)#Ensembles
Les ensembles représentent des collections non ordonnées d'éléments uniques, sans aucun doublon. Ils brillent particulièrement dans deux scénarios : l'élimination automatique de doublons dans une collection, et les opérations ensemblistes classiques comme l'union, l'intersection et la différence. Grâce à leur implémentation basée sur le hachage, tester l'appartenance d'un élément se fait en temps O(1) amorti, ce qui les rend très performants pour vérifier la présence d'éléments dans une grande collection.
#Tuples
Les tuples sont des séquences ordonnées et immuables, souvent utilisées pour représenter des enregistrements de petite taille comme des coordonnées ou des triplets de données. Leur immuabilité les rend hashables, ce qui permet de les utiliser comme clés dans les dictionnaires, contrairement aux listes. Ils sont également idéaux pour retourner plusieurs valeurs depuis une fonction, Python permettant le déballage automatique des tuples lors de l'affectation.
#Pièges fréquents
Deux erreurs classiques guettent les développeurs Python débutants. La première concerne l'utilisation de valeurs par défaut mutables dans les définitions de fonctions, un sujet détaillé dans le chapitre sur les fonctions. La seconde erreur consiste à modifier une liste pendant qu'on l'itère, ce qui peut produire des comportements imprévisibles. Pour éviter ce problème, privilégiez soit la construction d'une nouvelle liste via une compréhension de liste, soit l'itération sur une copie explicite de la liste originale.
1s1, s2 = {1,2,3}, {2,3,4}2print(s1 | s2, s1 & s2)#Playground
#Exercices
Ces exercices vous permettront d'approfondir votre maîtrise des différentes structures de données :
Commencez par implémenter un algorithme de tri par sélection qui opère directement sur une liste en place. Ensuite, construisez un index inversé, une structure qui associe chaque mot unique d'un texte à la liste de ses positions d'occurrence. Poursuivez en écrivant une fonction capable de supprimer les doublons d'une liste tout en garantissant la préservation de l'ordre d'apparition initial des éléments. Enfin, explorez les structures avancées en implémentant une file avec priorité (priority queue) à l'aide d'un tas binaire, en vous appuyant sur le module heapq.