Theme 9Approfondir les structures de données (Listes, tuples et dictionnaires)2011-04-071
Les listes: Accès aux élémentsnombres=[5,38,10,25]Accéder à un seul élément (index)Ex: print(nombres[2])10 Accéder à plusieurs éléments (slicing: découpage en tranches)Ex: print(nombres[1:3])[38, 10]	#tranche de type listeEx: print(nombres[2:3])[10]Ex: print(nombres[2:])[10,25]Ex: print(nombres[-1])25Ex: print(nombres[-3])382
nombres = [17, 38, 10, 25, 72]Trier une listeEx: nombres.sort()Inverser  l’ordre des élémentsEx: nombres.reverse()Retrouver l'index d'un élément (le premier rencontré)Ex: nombres.index(17)Enlever un élément (le premier rencontré)Ex: nombres.remove(38)Enlever un élément à un indexEx: del(nombres[2])Ex: del(nombres[2:4])3Les listes: autres opérations
Les listes: Remplacement d’élémentsmots = ['jambon', 'fromage', 'confiture', 'chocolat']Insertion dans une listeEx: mots[2:2] = ['miel']Ex: mots[5:5] =['saucisson', 'ketchup']Suppression de la listeEx: mots[2:2] = ['miel']Ex: mots[2:5]=[]Ex: mots[1:3] = ['salade']4
Exercice 9.1Écrire un programme qui permet de  simuler une gestion de la file d’attente suivante dans un centre de services['client 1','client 2','client 3','client 4','client 5','client 6','client 7'] Sans utiliser un compteur de bouclesLe premier client arrivé dans le centre de services  est  'client 1‘Le résultat de la simulation serait['client 1'] est en cours de service,   il reste les clients suivants dans la liste ['client 2','client 3','client 4','client 5','client 6','client 7'] dans la file['client 1'] servi['client 2'] est en cours de service,   il reste les clients suivants dans la liste ['client 3','client 4','client 5','client 6','client 7'] dans la file['client 2'] serviEtc..5
Exercice 9.2Écrire un programme qui permet de comparer deux listesPar exemple comparer deux à deux les listes suivantesliste1=[76,23,14,2,33,18]liste2=[23,76,33,18,2,14]liste3=[2,56,85,12,1,1]Pour cela nous utiliserons la fonction sort()6
Les listes et la fonction rangeLa fonction range fournit un ensemble de nombres (objet particulier appelé itérateur)range( [départ,]arrivée[,pas])Nous pouvons construire une liste à partir de cet ensemble avec list()Ex: list(range(2,10))Nous pouvons  aussi construire un tupleà partir de cet ensemble avec tuple()Ex: tuple(range(4,25,6))7
Les tuplesTypes de données composites: chaînes, listes + tuplesChaines Vs listesComposition: caractères Vs différents typesNon modifiables Vs modifiablesTupleComposition: différents typesNon modifiableSyntaxeEx: monTuple=('anne','cote',24,'etudiante')8
Similaires aux opérations sur les listes, sauf opérations de modification(ajout et suppression)Longeur d’un tuple: len(monTuple)Accès à un élémentmonTuple[3]monTuple[1:] (le slicing retourne un tuple)Conversion en listeListe = list(monTuple)9Les tuples: les opérations
Exercice 9.3Écrire un programme qui permet de charger des villes ainsi que leurs coordonnées (latitude, longitude) enregistrées dans un fichier «villes.txt ». Pour que ces informations ne soient pas modifiées tout au long du programme, nous désirons les inscrire dans des tuples. Les différents tuples seront enregistrés dans une liste définie dans le programme10
Surcharge de l’opérateur +Applicable aux chaines, listes et tuplesOpérateur + (concaténation):uneChaine = "aaabbb ccc " uneChaine = " --- "+uneChaine+ " --- "liste = liste + ['jambon', 'fromage', 'confiture']liste1 = liste + [‘recette']montuple = tuple1+tuple2montuple=tuple6+montuple+tuple311
Surcharge de l’opérateur *Applicable aux chaines, listes et tuplesuneChaine = "aaabbb cccc " *3uneChaine = unechaine+"  "+unechaine*3liste = liste*3liste1 = liste +[‘recette']montuple= (tuple6*montuple+tuple3)*212
Les dictionnairesType compositeChaînes, listes et tuples: séquences ordonnées (les éléments sont indexés par des séquences d’entiers)Dictionnaire:Opérations: La plupart est similaire avec celles des listesDifférence: Les éléments sont indexés par clés uniquesUne clé: alphabétique, numérique, ou type composite(sous certaines conditions)Les éléments peuvent être de n’importe quel type de donnée13
Création d’un dictionnaireInitialisation directeInitialisation par ajout élément par élément14dico = {'computer': 'ordinateur', 'keyboard': 'clavier', 'mouse': 'souris'}printdico["computer"]dico = {}  #intialisationd’un dictionnaire dico["a"]=["arbre","alien","abrit"]dico["b"]=["betise","batiment"]dico["c"]=["cat","cale","cailloux"]  printdicoprint dico["a"]print dico["a"][2]
Opérations sur les dictionnairesEnlever un élémentExemple: deldico["a"]Test d’appartenance d’une cléprint  "b" in dicoif "b" in dico:print "Trouvé!"Liste des clés du dictionnaireprintdico.keys()Liste des valeurs du dictionnaireprintdico.values()15
Parcours d’un dictionnaireItérer sur les clésfor uneClein dico:printuneCle,dico[uneCle]Lister les couples (clé, valeur)  du dicitonnaire sous forme de liste de tuplesliste = dico.items()print listeParcourir les tuples de clés et leurs éléments associésfor uneCle, uneValeurin dico.items():printuneCle,uneValeur16
RemarquesLes dictionnaires ne sont pas des séquences (les indexes n’ont pas d’ordre déterminé)Erreur si on essaye de ConcaténerExtraction d’éléments contigus (slicing)Possibilité d’affecter un indice (la clé) contrairement aux listes17
Exercice 9.4Nous désirons représenter la matrice suivante à l’aide d’un dictionnaire:18
SolutionA chaque couple (ligne, colonne) correspond un élémentReprésenter le couple par un tupleIndexer l’élément par le couple (ligne, colonne) correspondantdico[(0,2)]=["roi"]dico[(1,0)]=["pion"]dico[(3,1)]=["reine"]dico[(4,0)]=["tour"]dico[(5,2)]=["chevalier"]Tester printdico[(5,5)] !!!19
Solution au probleme de clé non définieTraiter le cas des clés inexistantes dans le dictionnaire: fonction get()Exemple: printechiquier.get((5,5), "non existant")20cléMessage a afficher dans le cas ou la clé n’existe pas
Exercice 9.5Écrivez une fonction qui échange les clés et les valeurs d’un dictionnaire (ce qui permettra par exemple de transformer un dictionnaire  anglais/français en un dictionnaire français/anglais). On suppose que le dictionnaire ne contient pas plusieurs valeurs identiques.21
Exercice 9.6Écrivez un script qui crée un mini-système de base de données fonctionnant a l’aide d’un dictionnaire, dans lequel vous mémoriserez les noms d’une série de copains, leur âge et leur taille. Votre script devra comporter deux fonctions : la première pour le remplissage du dictionnaire, et la seconde pour sa consultationDans la fonction de remplissage, utilisez une boucle pour accepter les données entrées par l’utilisateur. Dans le dictionnaire, le nom de l’élève servira de clé d’accès, et les valeurs seront constituées de tuples(âge, taille).La fonction de consultation comportera elle aussi une boucle, dans laquelle l’utilisateur pourra fournir un nom quelconque pour obtenir en retour le couple ≪ âge, taille ≫ correspondant. 22

Theme 9(bis)

  • 1.
    Theme 9Approfondir lesstructures de données (Listes, tuples et dictionnaires)2011-04-071
  • 2.
    Les listes: Accèsaux élémentsnombres=[5,38,10,25]Accéder à un seul élément (index)Ex: print(nombres[2])10 Accéder à plusieurs éléments (slicing: découpage en tranches)Ex: print(nombres[1:3])[38, 10] #tranche de type listeEx: print(nombres[2:3])[10]Ex: print(nombres[2:])[10,25]Ex: print(nombres[-1])25Ex: print(nombres[-3])382
  • 3.
    nombres = [17,38, 10, 25, 72]Trier une listeEx: nombres.sort()Inverser l’ordre des élémentsEx: nombres.reverse()Retrouver l'index d'un élément (le premier rencontré)Ex: nombres.index(17)Enlever un élément (le premier rencontré)Ex: nombres.remove(38)Enlever un élément à un indexEx: del(nombres[2])Ex: del(nombres[2:4])3Les listes: autres opérations
  • 4.
    Les listes: Remplacementd’élémentsmots = ['jambon', 'fromage', 'confiture', 'chocolat']Insertion dans une listeEx: mots[2:2] = ['miel']Ex: mots[5:5] =['saucisson', 'ketchup']Suppression de la listeEx: mots[2:2] = ['miel']Ex: mots[2:5]=[]Ex: mots[1:3] = ['salade']4
  • 5.
    Exercice 9.1Écrire unprogramme qui permet de simuler une gestion de la file d’attente suivante dans un centre de services['client 1','client 2','client 3','client 4','client 5','client 6','client 7'] Sans utiliser un compteur de bouclesLe premier client arrivé dans le centre de services est 'client 1‘Le résultat de la simulation serait['client 1'] est en cours de service, il reste les clients suivants dans la liste ['client 2','client 3','client 4','client 5','client 6','client 7'] dans la file['client 1'] servi['client 2'] est en cours de service, il reste les clients suivants dans la liste ['client 3','client 4','client 5','client 6','client 7'] dans la file['client 2'] serviEtc..5
  • 6.
    Exercice 9.2Écrire unprogramme qui permet de comparer deux listesPar exemple comparer deux à deux les listes suivantesliste1=[76,23,14,2,33,18]liste2=[23,76,33,18,2,14]liste3=[2,56,85,12,1,1]Pour cela nous utiliserons la fonction sort()6
  • 7.
    Les listes etla fonction rangeLa fonction range fournit un ensemble de nombres (objet particulier appelé itérateur)range( [départ,]arrivée[,pas])Nous pouvons construire une liste à partir de cet ensemble avec list()Ex: list(range(2,10))Nous pouvons aussi construire un tupleà partir de cet ensemble avec tuple()Ex: tuple(range(4,25,6))7
  • 8.
    Les tuplesTypes dedonnées composites: chaînes, listes + tuplesChaines Vs listesComposition: caractères Vs différents typesNon modifiables Vs modifiablesTupleComposition: différents typesNon modifiableSyntaxeEx: monTuple=('anne','cote',24,'etudiante')8
  • 9.
    Similaires aux opérationssur les listes, sauf opérations de modification(ajout et suppression)Longeur d’un tuple: len(monTuple)Accès à un élémentmonTuple[3]monTuple[1:] (le slicing retourne un tuple)Conversion en listeListe = list(monTuple)9Les tuples: les opérations
  • 10.
    Exercice 9.3Écrire unprogramme qui permet de charger des villes ainsi que leurs coordonnées (latitude, longitude) enregistrées dans un fichier «villes.txt ». Pour que ces informations ne soient pas modifiées tout au long du programme, nous désirons les inscrire dans des tuples. Les différents tuples seront enregistrés dans une liste définie dans le programme10
  • 11.
    Surcharge de l’opérateur+Applicable aux chaines, listes et tuplesOpérateur + (concaténation):uneChaine = "aaabbb ccc " uneChaine = " --- "+uneChaine+ " --- "liste = liste + ['jambon', 'fromage', 'confiture']liste1 = liste + [‘recette']montuple = tuple1+tuple2montuple=tuple6+montuple+tuple311
  • 12.
    Surcharge de l’opérateur*Applicable aux chaines, listes et tuplesuneChaine = "aaabbb cccc " *3uneChaine = unechaine+" "+unechaine*3liste = liste*3liste1 = liste +[‘recette']montuple= (tuple6*montuple+tuple3)*212
  • 13.
    Les dictionnairesType compositeChaînes,listes et tuples: séquences ordonnées (les éléments sont indexés par des séquences d’entiers)Dictionnaire:Opérations: La plupart est similaire avec celles des listesDifférence: Les éléments sont indexés par clés uniquesUne clé: alphabétique, numérique, ou type composite(sous certaines conditions)Les éléments peuvent être de n’importe quel type de donnée13
  • 14.
    Création d’un dictionnaireInitialisationdirecteInitialisation par ajout élément par élément14dico = {'computer': 'ordinateur', 'keyboard': 'clavier', 'mouse': 'souris'}printdico["computer"]dico = {} #intialisationd’un dictionnaire dico["a"]=["arbre","alien","abrit"]dico["b"]=["betise","batiment"]dico["c"]=["cat","cale","cailloux"]  printdicoprint dico["a"]print dico["a"][2]
  • 15.
    Opérations sur lesdictionnairesEnlever un élémentExemple: deldico["a"]Test d’appartenance d’une cléprint  "b" in dicoif "b" in dico:print "Trouvé!"Liste des clés du dictionnaireprintdico.keys()Liste des valeurs du dictionnaireprintdico.values()15
  • 16.
    Parcours d’un dictionnaireItérersur les clésfor uneClein dico:printuneCle,dico[uneCle]Lister les couples (clé, valeur) du dicitonnaire sous forme de liste de tuplesliste = dico.items()print listeParcourir les tuples de clés et leurs éléments associésfor uneCle, uneValeurin dico.items():printuneCle,uneValeur16
  • 17.
    RemarquesLes dictionnaires nesont pas des séquences (les indexes n’ont pas d’ordre déterminé)Erreur si on essaye de ConcaténerExtraction d’éléments contigus (slicing)Possibilité d’affecter un indice (la clé) contrairement aux listes17
  • 18.
    Exercice 9.4Nous désironsreprésenter la matrice suivante à l’aide d’un dictionnaire:18
  • 19.
    SolutionA chaque couple(ligne, colonne) correspond un élémentReprésenter le couple par un tupleIndexer l’élément par le couple (ligne, colonne) correspondantdico[(0,2)]=["roi"]dico[(1,0)]=["pion"]dico[(3,1)]=["reine"]dico[(4,0)]=["tour"]dico[(5,2)]=["chevalier"]Tester printdico[(5,5)] !!!19
  • 20.
    Solution au problemede clé non définieTraiter le cas des clés inexistantes dans le dictionnaire: fonction get()Exemple: printechiquier.get((5,5), "non existant")20cléMessage a afficher dans le cas ou la clé n’existe pas
  • 21.
    Exercice 9.5Écrivez unefonction qui échange les clés et les valeurs d’un dictionnaire (ce qui permettra par exemple de transformer un dictionnaire anglais/français en un dictionnaire français/anglais). On suppose que le dictionnaire ne contient pas plusieurs valeurs identiques.21
  • 22.
    Exercice 9.6Écrivez unscript qui crée un mini-système de base de données fonctionnant a l’aide d’un dictionnaire, dans lequel vous mémoriserez les noms d’une série de copains, leur âge et leur taille. Votre script devra comporter deux fonctions : la première pour le remplissage du dictionnaire, et la seconde pour sa consultationDans la fonction de remplissage, utilisez une boucle pour accepter les données entrées par l’utilisateur. Dans le dictionnaire, le nom de l’élève servira de clé d’accès, et les valeurs seront constituées de tuples(âge, taille).La fonction de consultation comportera elle aussi une boucle, dans laquelle l’utilisateur pourra fournir un nom quelconque pour obtenir en retour le couple ≪ âge, taille ≫ correspondant. 22