Choisissez la structure adaptée à chaque besoin : tuples immuables, sets pour l'appartenance en O(1), Counter et defaultdict pour les motifs récurrents.
Ouvrir cette leçon dans KodokonChoisir la bonne structure de données règle d'un coup la lisibilité et la performance. Le tuple est une séquence immuable : idéal pour un enregistrement hétérogène de taille fixe (coordonnées, paire clé-valeur). Immuable implique hashable (si son contenu l'est) : un tuple peut donc servir de clé de dictionnaire ou d'élément de set, ce qu'une liste ne peut pas. Le déballage (unpacking) rend le code expressif - et une fonction qui « retourne plusieurs valeurs » retourne en réalité un tuple.
point = (48.85, 2.35)
lat, lon = point
def min_max(values):
return min(values), max(values)
low, high = min_max([3, 1, 4, 1, 5])
print(low, high)
distances = {("paris", "lyon"): 465}
print(distances[("paris", "lyon")])Le set garantit l'unicité et offre un test d'appartenance en O(1) en moyenne, là où une liste est en O(n). Sur une boucle qui vérifie x in collection des milliers de fois, la différence se mesure immédiatement. Les opérateurs ensemblistes (& intersection, - différence, | union) remplacent avantageusement des doubles boucles : comparer deux listes d'identifiants - qui a disparu, qui est nouveau - tient en deux lignes.
active = {"ada", "linus", "guido"}
banned = {"linus", "mallory"}
print(active & banned)
print(active - banned)
print(active | banned)
emails = ["a@x.io", "b@x.io", "a@x.io"]
unique = set(emails)
print(len(unique))Le module collections couvre deux besoins quotidiens. Counter compte les occurrences d'un itérable et expose most_common(n) - fini les dictionnaires de comptage écrits à la main. defaultdict(factory) fabrique la valeur manquante à la volée : defaultdict(list) est l'outil canonique pour grouper des éléments par clé sans tester l'existence de la clé à chaque tour de boucle.
from collections import Counter, defaultdict
words = ["go", "py", "go", "rs", "go"]
counts = Counter(words)
print(counts.most_common(2))
groups = defaultdict(list)
pairs = [("fr", "Ada"), ("us", "Lin"), ("fr", "Zoe")]
for country, name in pairs:
groups[country].append(name)
print(dict(groups))