Prepa Help
Prepa Help › Cours › Informatique, 1re année

Tuples, dictionnaires et ensembles en Python : cours et exercices corrigés

Tuples (création, déballage, immuabilité, renvoi de plusieurs valeurs), dictionnaires (clés, valeurs, ajout, test d'appartenance, parcours, comptage d'occurrences, regroupement), coût des opérations usuelles, et pour le Maroc les ensembles (set) et leurs opérations.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Un dictionnaire Python associe à chaque clé une valeur : d[c] lit la valeur de la clé c, d[c] = v la crée ou la remplace, c in d teste la présence d'une clé, chacun en temps constant en moyenne, quand x in L sur une liste fait jusqu'à nn comparaisons. Un tuple est une suite de valeurs qui ne se modifie pas : il range un enregistrement figé, sert de clé composée et porte les résultats multiples d'une fonction, qu'on récupère par dépaquetage. Ce chapitre d'informatique commune de première année, au programme de MPSI, PCSI, PTSI, TSI et TPC, au Maroc et en France, écrit en un seul parcours les algorithmes de base sur les dictionnaires : compter des occurrences, cumuler un total par clé, regrouper, trouver la clé de plus grande valeur, inverser, détecter un doublon en O(n)O(n) en moyenne au lieu de O(n2)O(n^2). Les exercices et problèmes reprennent des questions des sujets du CNC, de CCINP, de Mines-Ponts et de X-ENS. Les ensembles (set), avec union et intersection, sont au programme marocain et sont traités dans une partie qui lui est propre.

Ce que tu sauras faire

Une liste range des valeurs dans l'ordre ; elle ne suffit pas à tout. Une pesée enregistrée doit rester telle qu'elle a été notée ; un producteur doit se retrouver par son code sans relire tout le registre. Ce chapitre présente deux types qui répondent à ces besoins, le tuple et le dictionnaire, puis les algorithmes de base qui s'écrivent avec un dictionnaire. À la fin de ce chapitre, tu dois savoir :

L'essentiel : Les dictionnaires Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

À retenir Dictionnaire
  • Associe à chaque clé une valeur ; une clé n'apparaît qu'une fois ; deux clés peuvent avoir la même valeur.
  • {} (vide), {c1: v1, c2: v2} ; d[c] lit (clé absente : KeyError) ; d[c] = v crée ou remplace ; pas d'append.
  • c in d teste les clés ; len(d) compte les clés.
  • for c in d (comme for c in d.keys()) parcourt les clés, d[c] donne la valeur ; for (c, v) in d.items() parcourt les couples. Ordre : celui de la première insertion. Pas d'ajout de clé pendant le parcours.
  • e = d est un alias ; d.copy() est une copie superficielle (une valeur liste reste partagée).
  • Clés permises : nombres, chaînes, tuples de tels objets ; jamais de liste. Éviter les flottants calculés ; 1, 1.0 et True sont la même clé.

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 17 méthodes, 20 pièges corrigés, la carte mentale, 35 exercices corrigés, 4 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Les trois premiers chapitres de chaque matière sont offerts avec un compte d’essai gratuit.

Ouvrir l'essai gratuitVoir les offres

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Choisir entre liste, tuple et dictionnaire
  2. Créer et lire un tuple sans erreur
  3. Renvoyer plusieurs valeurs et les récupérer par un seul dépaquetage
  4. Parcourir une liste de couples ou de triplets en dépaquetant dans la boucle
  5. Lire et écrire dans un dictionnaire sans erreur de clé
  6. Parcourir un dictionnaire
  7. Choisir une clé permise, composer une clé par un tuple
  8. Compter des occurrences en un seul parcours
  9. Cumuler un total par clé
  10. Regrouper des éléments par clé dans un dictionnaire de listes
  11. Trouver la clé de plus grande valeur, avec la règle des ex aequo
  12. Inverser un dictionnaire
  13. Retenir les éléments déjà vus
  14. Prouver un parcours de dictionnaire et justifier son coût
  15. Copier un dictionnaire sans alias
  16. Utiliser un ensemble
  17. Employer les fonctions du programme marocain

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (14)

Entraînement (16)

Approfondissement (5)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Quelle différence entre une liste et un tuple en Python ?

Un tuple ne se modifie pas : p[2] = 12400 sur un tuple provoque une TypeError, et pour changer une valeur on fabrique un nouveau tuple. Une liste range une collection qui grandit ou change ; un tuple range un enregistrement figé dont chaque place a un sens, comme une pesée (producteur, variété, poids, lot), un point ou une date. Un tuple dont les valeurs sont des nombres, des chaînes ou d'autres tels tuples peut être une clé de dictionnaire, une liste jamais. Un tuple à un seul élément s'écrit (5,) : (5) est l'entier 5. Un tuple qui contient une liste reste le même, mais la liste, elle, peut changer.

Comment compter les occurrences avec un dictionnaire en Python ?

On parcourt la liste une seule fois : pour chaque élément x, si x in d, on écrit d[x] = d[x] + 1, sinon d[x] = 1, et l'on renvoie d après la boucle. Sur la liste ['V03', 'V01', 'V05', 'V03', 'V03', 'V02', 'V01', 'V03'], on obtient {'V03': 4, 'V01': 2, 'V05': 1, 'V02': 1}. Sans le cas de la première occurrence, d[x] + 1 lit une clé absente et le programme s'arrête sur KeyError. Le coût est en O(n)O(n) en moyenne, quand compter chacune des kk valeurs distinctes par un parcours complet coûterait knkn comparaisons. Au programme marocain, d[x] = d.get(x, 0) + 1 fait le même travail en une ligne.

Comment parcourir un dictionnaire en Python ?

for c in d parcourt les clés, comme for c in d.keys(), et d[c] donne la valeur de chacune ; for (c, v) in d.items() parcourt les couples (clé, valeur). Sans items(), for (c, v) in d reçoit les clés et tente de dépaqueter chacune : ValueError, ou pire, aucune erreur si les clés sont des couples. Les clés viennent dans l'ordre de leur première insertion, garanti depuis Python 3.7, mais on ne s'appuie pas sur cet ordre pour un résultat. keys() et items() se parcourent et ne s'indexent pas. Ajouter des clés pendant le parcours arrête le programme sur RuntimeError. Au programme marocain, d.values() parcourt les valeurs.

Quelle est la complexité des opérations sur un dictionnaire Python ?

On admet que c in d, d[c], d[c] = v et len(d) se font en temps constant en moyenne, quel que soit le nombre de clés ; le parcours et la copie d.copy() coûtent un temps proportionnel au nombre de clés. Sur une liste, x in L fait jusqu'à nn comparaisons. Dans la mesure du chapitre, 2 000 tests d'appartenance prennent 12,7 s dans une liste d'un million d'entiers, et 0,0005 s dans un dictionnaire qui a ces entiers pour clés. Détecter un doublon avec un dictionnaire des éléments déjà vus coûte au pire nn tests, au lieu de n(n−1)/2n(n-1)/2 comparaisons par deux boucles imbriquées, soit 499 500 pour n=1000n = 1000. En France, le principe qui permet ces coûts, le hachage, est vu en deuxième année.

Quelles clés peut-on utiliser dans un dictionnaire Python ?

Une clé est un nombre, une chaîne, ou un tuple dont les valeurs sont elles-mêmes permises comme clés. Une liste ou un dictionnaire n'est jamais une clé : d[[10, 15]] = 5 provoque une TypeError, de même qu'un tuple qui contient une liste. Les valeurs, elles, peuvent être de tout type. Pour une donnée qui dépend de deux informations, on prend un couple : grille[(2, 3)]. On évite les flottants calculés, car 0.1 + 0.2 ne retrouve pas la clé 0.3, et l'on ne mélange pas nombres et booléens : 1, 1.0 et True sont la même clé.

Comment renvoyer plusieurs valeurs d'une fonction Python ?

La fonction renvoie un tuple, return (x, y), et l'appelant le dépaquette en une seule affectation : (p, v, g, l) = lire_pesee(ligne). Il faut autant de variables que de valeurs, sinon le programme s'arrête sur ValueError (too many ou not enough values to unpack). On appelle la fonction une seule fois : écrire lire_pesee(ligne)[0] puis lire_pesee(ligne)[2] refait tout le travail à chaque appel. L'échange a, b = b, a est lui aussi un dépaquetage, et for (p, v, g, l) in R dépaquette chaque quadruplet d'une liste dans l'en-tête de la boucle.

Comment y accéder

Ce chapitre fait partie de l'accès complet. Les trois premiers chapitres de chaque matière (deux par bloc en économie et droit, en management et gestion) sont offerts avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet et les tarifs, vois les offres.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Chaînes de caractères et algorithmes sur les textes · Tris par sélection, à bulles, par insertion et par comptage →