Courspython Chapitre5 LesStructuresDeDonnées

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 31

Chapitre 5 : Les structures de données.

Programmation Python
De la base aux concepts avancés de Python

Johannès HOUNSINOU

5 janvier 2024

Johannès HOUNSINOU Programmation Python


Chapitre 5 : Les structures de données.

Plan du cours

1 Chapitre 5 : Les structures de données.


Itérables séquentiels
Les tableaux (listes)
Les n-uplets
Les chaînes de caractères
Itérables non séquentiels
Les dictionnaires

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Itérables séquentiels

Définition
- On peut définir les itérables séquentiels comme des
conteneurs composés d’un nombre fini d’éléments auxquels on
peut accéder par un indice numérique.
- On peut les voir comme un ruban muni d’un curseur qui se
déplace et peut lire les valeurs qui y sont stockées.

Les termes les plus importants à retenir ici sont : conteneurs et


indice. L’indice d’un élément est la position de cet élément dans le
conteneur considéré.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Quelques itérables séquentiels

Il existe plusieurs itérables séquentiels en python :


- les tableaux (ou array en anglais) représentés par le mot-clé
list.
- les n-uplets : tuple.
- les chaînes de caractères (ou string en anglais) représentés par
str.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les tableaux (listes)

Les tableaux (listes)


- Un tableau est une suite contiguë de valeurs. C’est un
conteneur dont les valeurs sont l’une à la suite de l’autre, un
peu comme un ruban.
- Les listes en Python peuvent contenir toutes sortes d’objets.
- Les listes en Python sont dites mutable objects : on peut
modifier les éléments d’une liste.
- Pour construire une liste, il faut soit la déclarer en utilisant le
mot clé list , soit utiliser des crochets [ ].

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Exemple

>>> liste1 = [5, 2.2 ,-5, "a",7] # crée une liste de 5 éléments
>>> villes = ["Cotonou", "Abidjan", "Lagos"] # crée une liste de
3 string
>>> liste2 = [liste1, villes] # crée une liste de 2 listes
>>> liste3 = [ ] # crée une liste vide

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Indexage des listes

La séquence de données dans une liste est une séquence ordonnée.


Il y a un premier élément, un deuxième élément . . . et un dernier
élément. Autrement dit chaque élément d’une liste a un rang. Ce
rang constitue son index dans la liste et permet d’avoir accès à lui
de manière simple. Pour une liste de n éléments, les index vont de 0
à n-1 ou de -n à -1.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Indexage des listes

Exemple
>>> liste1 = [5, 2,-15, 4,[7,8]]
>>> print(liste1[0]) # affiche 5
>>> print(liste1[2]) # affiche -15
>>> print(liste1[-1][-1]) # affiche 8
>>> print(liste1[-2]) # affiche l’avant dernier élément 4

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Découpage des listes

On peut vouloir extraire une séquence de données d’une séquence


plus longue. On parle de découpage de liste. Plusieurs techniques
sont utilisées. De façon générale, la formule de découpage est :
liste[début :fin :pas].

L’élément à l’index fin ne fait pas partie du découpage.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Découpage des listes

Exemple
>>> liste1 = [5, 2,-15, 4,7,-8,0,-4]
>>> print(liste1[0 :3])# affiche 5 2 -15
>>> print(liste1[2 :7 :2])# affiche -15 7 0
>>> print(liste1[ :4])# affiche 5 2 -15 4
>>> print(liste1[4 :])# affiche 7 -8 0 - 4
>>> print(liste1[ : :2])# affiche 5 -15 7 0
>>> print(liste1[ : :-2])# affiche -4 -8 4 2

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Opérations sur les listes

Plusieurs opérations sont possibles sur les listes. Quelques unes sont
décrites dans le tableau ci-dessous.

Nom Opérateur Description


Concaténation + Colle deux listes l’une à la suite de l’autre
Duplication * Répéter la liste plusieurs fois
Ajout .append() Rajouter en fin de liste
Tri .sort() Trie une liste
Insertion .insert() Insère une valeur à un index dans la liste
Suppression .remove() Supprime une valeur de la liste
Index .index() Renvoie l’index d’une valeur de la liste
Effectif .count() Renvoie l’effectif d’une valeur de la liste
Longueur len() Renvoie la longueur d’une liste

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

If et les listes

On peut utiliser la condition if avec les listes. Il s’agit notamment


de vérifier si un élément se trouve dans une liste.
Exemple :
>>> villes = [’Abidjan’,’Lome’,’Cotonou’,’Conakry’]
>>> if ’Abidjan’ in villes :
>>> print(’OUI’)
>>> else :
>>> print(’NON’)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

For et les listes

Il existe plusieurs manières d’utiliser la boucle for . . . in avec les


listes. La boucle for permet de parcourir la liste dans son entièreté
élément par élément.

Exemple :
>>> villes = [’Abidjan’,’Lome’,’Cotonou’,’Conakry’]
>>> for i in villes :
>>> print(i)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

For et les listes

Il est possible avec la boucle for de parcourir les éléments d’une


liste avec leurs index correspondants.

Exemple :
>>> villes = [’Abidjan’,’Lome’,’Cotonou’,’Conakry’]
>>> for index, valeur in enumerate(villes) :
>>> print(index, valeur)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

For et les listes

La boucle for permet également de parcourir deux listes à la fois.


Elle s’arrête à l’index de la plus petite liste en taille.

Exemple :
>>> villes = [’Abidjan’,’Lome’,’Cotonou’,’Conakry’]
>>> noms = [’Pierre’,’Cossi’,’Alain’,’Houessou’,’Claire’]
>>> for a, b in zip(villes, noms) :
>>> print(b, ’va à ’, a)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les listes en compréhension

Si on veut générer tous les carrés de 0 à 9 dans une liste, le code


serait le suivant :

>>> liste1 = [ ]
>>> for i in range(10) :
>>> liste1.append(i**2)

Il est possible de faire la même chose en faisant simplement :

>>> liste2 = [i**2 for i in range(10)]

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les listes en compréhension

On peut aussi générer des listes de listes avec les listes en


compréhension.

Exemple :
>>> liste1 = [ ]
>>> liste2 = [ ]
>>> for i in range(3) :
>>> liste1.append(i)
>>> for j in range(3) :
>>> liste2.append(liste1)

>>> liste3= [[i for i in range(3)] for j in range(3)]

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

If dans les listes en compréhension

Il est possible de ne pas vouloir générer pour tous les nombres


d’une série de range( ) et donc d’ajouter des conditions dans les
listes en compréhension.

Exemple :
>>> liste1 = [i**2 for i in range(3,10,2)]
>>> liste2= [i for i in range(10) if i%2==0]
>>> liste3= [[i+j for i in range(10) if i%2==0] for j in range(10) if
j%3==0]

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les n-uplets

Les n-uplets
Les n-uplets (tuples en anglais) correspondent aux listes à la
différence qu’ils sont immutables, c’est-à-dire non modifiables. Pour
construire une tuple, il faut :
- soit la déclarer en utilisant des paranthèses ( ) .
- soit utiliser le mot-clé tuple.

Exemple
>>> animaux_tuple_direct = (’girafe’,’tigre’, ’singe’)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Opérations sur les n-uplets

Toutes les opérations précédentes qu’on a vu pour les listes, sont


applicables aux tuples sauf :
- la modification d’un élément : mon_tuple[indice] =
quelque_chose ne marchera pas.
- la méthode append (et toutes celles qui crée une modification)
ne marche pas pour les tuples.
- pour créer un tuple ne contenant que l’élément 1 , on fait :
mon_tuple = (1, ) .
Remarquez la virgule, juste après le 1. À la différence d’une
liste où on aurait ma_liste = [1] .

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Quelques autres détails sur les n-uplets

- On peut ajouter des éléments à un tuple ! Pour ce faire, on


utilise la concaténation.
>>> mon_tuple = (1, 2)
- Pour ajouter 3 au tuple, on fait :
>>> mon_tuple += (3, )
- Ce qui donnera (1, 2, 3) . En fait, on crée un nouveau tuple !

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les chaînes de caractères

C’est le type des données textuelles qu’on appelle souvent chaînes


de caractères. Elles sont très fréquemment utilisées et elles peuvent
être écrites de différentes manières.

- Entre guillemets simples. Exemple : ’autorisent les


"guillemets"’
- Entre guillemets. Exemple : ‘"autorisent les guillemets
’simples’"
- Entre guillemets triples. Exemples : ” ’Trois guillemets
simples” ’ , """Trois guillemets"""

L’indexage, le découpage et la fonction len() sont possibles sur les


chaînes de caractères.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les chaînes de caractères - La Casse


La casse
En Python, les Strings possède plusieurs méthodes permettant de
modifier la casse. Il s’agit entre autre de : str.lower(),
str.upper(), str.title(), str.capitalize(),
str.swapcase()...

Exemple :
>>> texte = "le Bénin est magnifique."
>>> texte.lower() # Tout en miniscule
>>> texte.upper() # Tout en majuscule
>>> texte.title() # Majuscule à chaque mot
>>> texte.capitalize() # Majuscule au début de
phrase.
>>> texte.swapcase() # inverse la casse
Johannès HOUNSINOU Programmation Python
Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les chaînes de caractères - Autres méthodes utiles

Les occurrences
Pour compter le nombre d’apparition (ou occurrence) d’une
sous-chaine dans une chaîne, on utilise la méthode :
str.count(sousChaine)

Rechercher et Remplacer
La méthode str.replace(old, new) permet de remplacer toutes
les occurences de la sous-chaine old par la chaine new.

Exemple
>>> texte = "Bénin est magnifique."
>>> texte.count("nin") # compte les apparition de
"nin"
>>> texte.replace("nin", "linda") # remplacement
Johannès HOUNSINOU Programmation Python
Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Itérables non séquentiels

Définition
Ce sont toujours des conteneurs, mais à la différence des itérables
séquentiels, leurs éléments ne sont pas ordonnés / contiguës.

On ne peut pas accéder à leurs éléments en utilisant des indices


numériques. On utilise plutôt ce qu’on appelle des clés.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les dictionnaires

Les dictionnaires se révèlent très pratiques lorsque vous devez


manipuler des structures complexes à décrire et que les listes
présentent leurs limites.

Les dictionnaires sont des collections non ordonnées d’objets,


c’est-à-dire qu’il n’y a pas de notion d’ordre.

On accède aux valeurs d’un dictionnaire par des clés. (qu’on peut
voir comme des indices textuels !)

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Exemple

>>> dict1 = {"ordinateur" :"computer","etat" :"state",2 :"two" }


>>> print(dict1[2]) # affiche "two"
>>> print(dict1["ordinateur"]) # affiche "computer"

Chaque clef doit être unique pour un dictionnaire afin d’éviter les
problèmes de correspondance. En revanche, la même valeur peut
être utilisée plusieurs fois.

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Opérations sur les dictionnaires

Plusieurs opérations sont possibles sur les dictionnaires.


Exemple :
>>> point = {"sorgho" :120,"mil" :145,"blé" :98,"manioc" :65}
>>> point.values( ) # affiche toutes les valeurs du dictionnaire
>>> point.keys( ) # affiche toutes les clés du dictionnaire
>>> list(point) # renvoie les clés sous forme de variable de type list
>>> len(point) # renvoie le nombre d’associations clef-valeur dans
le dictionnaire
>>> del point["mil"] # enlève l’association clef-valeur
correspondant à la clef "mil"
>>> new_point = point.copy() # réalise une copie de point dans
new_point, les deux variables sont indépendantes

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

For et les dictionnaires

Il existe plusieurs manières d’utiliser la boucle for . . . in avec les


dictionnaires. La boucle for permet de parcourir les dictionnaires.
Exemple :
>>> point = {"sorgho" :120,"mil" :145,"blé" :98,"manioc" :65}
>>> for i in point :
>>> print(i)
>>> for i in point.values() :
>>> print(i)
>>> for k,v in point.items() :
>>> print("Il y a ",v, "sacs de ", k, "." )

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

Les dictionnaires en compréhension

La technique des listes en compréhension est aussi valable pour les


dictionnaires lorsqu’on a déjà des listes à disposition.
Exemple :
>>> ages = [20, 14, 52, 45, 5]
>>> prenoms = [’Afi’, ’Bea’, ’Lea’, ’Carl’, ’Perla’]
>>> dict1 = { k :v for k,v in enumerate(prenoms)}
>>> dict2 = {prenom :age for prenom,age in zip(prenoms,ages)}

Johannès HOUNSINOU Programmation Python


Itérables séquentiels
Chapitre 5 : Les structures de données.
Itérables non séquentiels

If dans les dictionnaires en compréhension

Il est possible de mettre des conditions dans les dictionnaires en


compréhension.
Exemple :
>>> ages = [20, 14, 52, 45, 5]
>>> prenoms = [’Afi’, ’Bea’, ’Lea’, ’Carl’, ’Perla’]
>>> dict1 = {prenom :age for prenom,age in zip(prenoms,ages) if
age<20}
>>> dict2 = {prenom :age for prenom,age in zip(prenoms,ages)}

Johannès HOUNSINOU Programmation Python

Vous aimerez peut-être aussi