-
Présenté par :
Creative Commons
Pr. Nordine ZIDANE
Le 27/12/2023 ZIDANE NORDINE 1 1
Objectifs du cours
INTRODUCTION
PLAN
PLAN
P A
L Historique N
Concepts
Applications
Le 27/12/2023 ZIDANE NORDINE 2 2
Langage Python
Concepts:
Structures séquentielles de données.
Le 27/12/2023 ZIDANE NORDINE
3 3
Structures séquentielles de
données.
Le 27/12/2023 ZIDANE NORDINE 4
Structures séquentielles de données.
Objectifs de ce module
• Introduire des structures de données dites
« complexes ».
• Au sein d’une même entité on va ainsi pouvoir
stocker plusieurs données, et les traiter de
façon optimale.
Le 27/12/2023 ZIDANE NORDINE 5
Structures séquentielles de données.
Plan de ce module
1. Généralités sur les séquences en Python.
2. Les listes.
3. Les t--uples.
Le 27/12/2023 ZIDANE NORDINE 6
ENSAM RABAT
Structures séquentielles de données.
1. GÉNÉRALITÉS SUR LES
SÉQUENCES EN PYTHON.
Le 27/12/2023 ZIDANE NORDINE 7
1. Généralités sur les séquences en Python.
Plan de ce chapitre
a. Notion de séquence.
b. Les trois principaux types de séquences.
c. Opérations communes aux séquences.
d. Parcours d’une séquence avec « for ».
e. Exercice.
Le 27/12/2023 ZIDANE NORDINE 8
1. Généralités sur les séquences en Python.
a. Notion de séquence.
Motivation :
• Réunir au sein d’une même variable plusieurs
valeurs
différentes.
• L’objectif étant d’optimiser certaines opérations comme la
recherche d’un élément, le tri de ces valeurs, le calcul de
leur maximum, etc.
Le 27/12/2023 ZIDANE NORDINE 9
1. Généralités sur les séquences en Python.
a. Notion de séquence.
Définition :
•Suite d’éléments accessibles par leur position.
•Chaque élément, à part le premier, a un prédécesseur et, à
part le dernier, a un successeur.
Le 27/12/2023 ZIDANE NORDINE 10
1. Généralités sur les séquences en Python.
a. Notion de séquence.
Une séquence de n éléments :
Indexation des éléments à
partir du début
0 1 2 n-2 n-1
-n -(n – 1) -(n – 2) -2 -1
Indexation des éléments à
partir de la fin
Le 27/12/2023 ZIDANE NORDINE 11
1. Généralités sur les séquences en Python.
a. Notion de séquence.
Accès a un élément :
• L’accès à un élément d’une séquence se fait en utilisant la
position de cet élément et des crochets [ ].
maSéquence[maPositionVoulue]
Le 27/12/2023 ZIDANE NORDINE 12
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Les trois principaux types de séquences :
1. Les listes dont les éléments sont quelconques et
modifiables.
2. Les t--uples dont les éléments sont quelconques
et non modifiables.
3. Les chaînes de caractères dont les éléments sont
des caractères et ne sont pas modifiables.
Le 27/12/2023 ZIDANE NORDINE 13
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Syntaxes de la déclaration d’une liste :
maListeVide = []
maListeAvecUnSeulElement = [élément]
maListe = [élément1,élément2,...,élémentN]
Le 27/12/2023 ZIDANE NORDINE 14
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Exemple de création/manipulation de listes :
>>> maListe = [2, -3, ['sos', 66], 11]
>>> print(maListe)
[2, -3, ['sos', 66], 11]
>>> print(maListe[-1])
11
>>> maListe[1] = 666
>>> print(maListe[1])
666
>>> print(maListe[2][0][1])
o
On aura le même résultat avec:
>>> print(maListe[-2][-2][-2])
o Le 27/12/2023 ZIDANE NORDINE 15
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Un petit dessin de la liste précédente pour fixer les idées :
0 1
2 3
2 --3 [‘sos’, 66] 11
-4 -3 -2 -1
0 1
‘sos’ 66
-2 0 1 2
-1
s
s o s
-3 -2 -1
Le 27/12/2023 ZIDANE NORDINE 16
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Syntaxes de la déclaration de
t--uples :
monTupleVide = ()
monTupleAvecUnSeulElement = (élément,)
monTuple = (élément1,élément2,...,élémentN)
Le 27/12/2023 ZIDANE NORDINE 17
1. Généralités sur les séquences en Python.
b. Les 3 principaux types de séquences.
Exemple de création/manipulation de t--uples :
>>> monTuple = (2.718, 3.14, 1.414)
>>>
print(monTuple)
(2.718, 3.14, 1.414)
>>>
print(monTuple[2])
1.414
>>> monTuple[2] = 1.732
Traceback (most recent call last):
File "<console>", line 1, in <module> 18
Le 27/12/2023 ZIDANE NORDINE
1. Généralités sur les séquences en Python.
c. Opérations communes aux séquences
Accès aux éléments (“slicing”) :
Opération Résultat
s[i] i--ème élément de s
s[i:j] Sous--séquence de s constituée des éléments
entre le i--ème (inclus) et le j--ème
(exclus)
s[i:j:k] Sous--séquence de s constituée des éléments
entre le i--ème (inclus) et le j--ème (exclus)
pris avec un pas de k
Le 27/12/2023 ZIDANE NORDINE 19
1. Généralités sur les séquences en Python.
c. Opérations communes aux séquences
Exemple :
>>> t = (7, -3, 2, 11, 666, -1975)
>>> t[3:]
(11, 666, -1975)
>>>
t[1:4]
(-3, 2, 11)
>>> t[1::2]
(-3, 11, -1975)
>>> t[23]
Traceback (most recent call last):
File "<console>", line 1, in <module>
Le 27/12/2023
IndexError: tuple indexZIDANEout
NORDINE
of range 20
1. Généralités sur les séquences en Python.
c. Opérations communes aux séquences
Opérations de traitement :
Opération Résultat
x in s Teste si x appartient à s
x not in s Teste si x n’appartient pas à s
s+t Concaténation de s et t
s * n ou n * s Concaténation de n copies de s
len(s) Nombre d’éléments de s
min(s) Plus petit élément de s
max(s) Plus grand élément de s
s.count(x) Nombre d’occurences de x dans s
s.index(x) Indice de x dans s.
Le 27/12/2023 ZIDANE NORDINE 21
1. Généralités sur les séquences en Python.
c. Opérations communes aux séquences
Exemples :
>>> t = (7, -3, 2)
>>> 11 not in
t True
>>>
max(t) 7
>>> tt = 2*t
>>> print(tt)
(7, -3, 2, 7, -3, 2)
>>>
tt.count(-3) 2
Le 27/12/2023 ZIDANE NORDINE 22
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Itération sur les éléments :
for x in maSéquence:
traitement de l’élemént x
Le 27/12/2023 ZIDANE NORDINE 23
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Exemple :
l = [-2, 3,
11]
for x in l:
print(x**2)
Le 27/12/2023 ZIDANE NORDINE 24
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Itération sur les couples (indice, élément) :
for i,x in enumerate(maSéquence):
traitement de l’élemént x et/ou
de l’indice i
Le 27/12/2023 ZIDANE NORDINE 25
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Exemple :
l = (-2, 3, 11)
for i, x in enumerate(l):
print("élément n°",i+1,":",x**2)
Le 27/12/2023 ZIDANE NORDINE 26
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Itération sur les indices :
for i in range(len(maSéquence)):
traitement de l’élément maSéquence[i]
et/ou de l’indice i
Le 27/12/2023 ZIDANE NORDINE 27
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Exemple :
l = (-2, 3, 11)
for i in range(len(l)):
print("élément n°",i+1,":",l[i]**2)
Le 27/12/2023 ZIDANE NORDINE 28
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Itération sur deux séquences :
for x,y in zip(maSéquence1,maSéquence2):
traitement des éléments x et y
Le 27/12/2023 ZIDANE NORDINE 29
1. Généralités sur les séquences en Python.
d. Parcours d’une séquence avec “for”.
Exemple :
l = (-2, 3, 11)
m = 'Keith'
for x,y in zip(l,m):
print(x,y)
Le 27/12/2023 ZIDANE NORDINE 30
1. Généralités sur les séquences en Python.
e. Exercice.
Exercice : écrire une fonction prenant une séquence de
nombre entiers en paramètre, et qui retourne le nombre
d’entiers pairs de cette séquence.
Le 27/12/2023 ZIDANE NORDINE 31
1. Généralités sur les séquences en Python.
e. Exercice.
Solution :
def nbPairs(s):
n = 0
for x in s:
if x%2 == 0:
n += 1
return n
monTuple = (-4, 5, 2, 4, 1)
print(nbPairs(monTuple))
Le 27/12/2023 ZIDANE NORDINE 32
1. Généralités sur les séquences en Python.
Fin de ce chapitre
Avez – vous des questions ?
Le 27/12/2023 ZIDANE NORDINE 33
ENSAM RABAT
Structures séquentielles de données.
2. LES LISTES.
Le 27/12/2023 ZIDANE NORDINE 34
2. Les listes.
Plan de ce chapitre
a. Les listes sont muables.
b. Opérations propres aux listes.
c. Le délicat problème des copies
d. Listes définies « en compréhension ».
e. Listes multidimensionnelles.
f. Exercice.
Le 27/12/2023 ZIDANE NORDINE 35
2. Les listes.
a. Les listes sont muables.
Deux conséquences de la muabilité des listes :
1. On peut modifier les éléments d’une liste, en supprimer,
en ajouter d’autres.
2. Une liste transmise en paramètre à une
fonction peut être modifiée par cette dernière.
Le 27/12/2023 ZIDANE NORDINE 36
2. Les listes.
a. Les listes sont muables.
Exemple de modification d’une liste par une fonction :
defswap(l,i,j):
l[i], l[j] = l[j], l[i]
maListe = [1,2, 3, 4]
print("avant échange :",maListe)
swap(maListe,0,3)
print("après échange :",maListe)
Le 27/12/2023 ZIDANE NORDINE 37
2. Les listes.
b. Opérations propres aux listes.
Opérations de “slicing” pour modifier une liste :
Opération Résultat
s[i] = x Remplacement de l’élément s[i] par x
s[i:j] = t Remplacement des éléments de s[i:j] par ceux de
la séquence t
del(s[i:j]) Suppression des éléments de s[i:j]
s[i:j:k] = t Remplacement des éléments de s[i:j:k] par ceux
de la séquence t
del(s[i:j:k]) Suppression des éléments de s[i:j:k]
Le 27/12/2023 ZIDANE NORDINE 38
2. Les listes.
b. Opérations propres aux listes.
Exemple de modification d’une liste par “slicing” :
>>>maListe = [1, 2, 3, 4, 5]
>>>maListe[2:4] = (6,'x',7)
>>>print(maListe)
[1, 2, 6, 'x', 7, 5]
>>>maListe[1:6:2] = 'sup'
>>>print(maListe)
[1, 's', 6, 'u', 7, 'p']
Le 27/12/2023 ZIDANE NORDINE 39
2. Les listes.
b. Opérations propres aux listes.
Opérations de traitement :
Opération Résultat
Iist(s) Transforme une séquence s en une liste
s.append(x) Ajoute l’élément x à la fin de s
s.extend(t) Étend s avec la séquence t
s.insert(i,x) Insère l’élément x à la position i
s.clear() Supprime tous les éléments de s
s.remove(x) Retire l’élement x de s
s.pop(i) Renvoie l’élément d’indice i et le supprime
s.reverse() Inverse l’ordre des éléments de s
s.sort() Trie les éléments de s par ordre croissant
Le 27/12/2023 ZIDANE NORDINE 40
2. Les listes.
b. Opérations propres aux listes.
Exemples :
>>> maListe = [1, 3, 5]
>>> maListe.append(7)
>>>
print(maListe)
[1, 3, 5, 7]
>>> maListe.extend((8,
11))
>>>
print(maListe) [1,
3, 5, 7, 8, 11]
>>> maListe.remove(8)
Le 27/12/2023 ZIDANE NORDINE
>>> maListe.insert(4,9) 41
2. Les listes.
b. Opérations propres aux listes.
Exemples :
>>> maListe = list(range(1,10,2))
>>>maListe
[1, 3, 5, 7, 9]
>>>taListe = list('The Strypes')
>>>taListe
['T', 'h', 'e', ' ', 'S', 't', 'r', 'y',
'p', 'e', 's']
Le 27/12/2023 ZIDANE NORDINE 42
2. Les listes.
c. Le délicat problèmes des copies
Phénomène d’alias :
• La tentative de copie d’une liste avec la syntaxe naturelle
maListe2 = maListe1
ne crée qu’un alias.
• Les deux noms pointeront vers le même emplacement
mémoire. Il n’y aura donc en réalité qu’une seule liste
existante.
Le 27/12/2023 ZIDANE NORDINE 43
2. Les listes.
c. Le délicat problèmes des copies
Exemple du problème soulevé :
>>> maListe1 = [1, 2, 3,
4]
>>> maListe2 = maListe1
>>> maListe2[3] = 666
>>>
print(maListe1)
[1, 2, 3, 666]
>>> maListe1[0] =
'Python'
>>> print(maListe2)
Le 27/12/2023 ZIDANE NORDINE 44
2. Les listes.
c. Le délicat problèmes des copies
Plusieurs solutions pour réaliser une copie superficielle :
maListe2 = maListe1.copy()
import copy
maListe2 = copy.copy(maListe1)
maListe2 = list(maListe1)
maListe2 = []
maListe2.extend(maListe1)
maListe2 = maListe1[:]
Le 27/12/2023 ZIDANE NORDINE 45
2. Les listes.
c. Le délicat problèmes des copies
Exemple d’une copie “qui marche” :
>>> maListe1 = [1, 2, 3,
4]
>>> maListe2 =
maListe1[:]
>>> maListe2[3] = 666
>>>
print(maListe1)
[1, 2, 3, 4]
>>> maListe1[0] =
'Python' 46
Le 27/12/2023 ZIDANE NORDINE
2. Les listes.
c. Le délicat problèmes des copies
Solution pour réaliser une copie profonde :
import copy
maListe2 = copy.deepcopy(maListe1)
Le 27/12/2023 ZIDANE NORDINE 47
2. Les listes.
c. Le délicat problèmes des copies
Exemple d’une copie profonde :
>>> maListe1 = [1, [11, 22]]
>>> maListe2 = list(maListe1)
>>> maListe2[1][0] = 33
>>>
print(maListe1)
[1, [33, 22]]
>>> import copy
>>> maListe3 =
copy.deepcopy(maListe1)
>>> maListe3[1][0] = 44
>>> Le 27/12/2023 ZIDANE NORDINE 48
2. Les listes.
d. Listes définies “en compréhension”.
Principe :
• Le but est de construire une liste à partir d’une séquence
déjà existante.
• Plus précisément, on va effectuer une opération sur
chacun des éléments d’une séquence pour obtenir une
liste constituée des différents résultats.
Le 27/12/2023 ZIDANE NORDINE 49
2. Les listes.
d. Listes définies “en compréhension”.
Syntaxe générale :
[expression for x in sequence if
conditionnelle]
Le 27/12/2023 ZIDANE NORDINE 50
2. Les listes.
d. Listes définies “en compréhension”.
Exemple 1 : élever au carré les éléments d’une
séquence pour construire une liste
t = (11, 22, 33, 44)
l = [x**2 for x in
t] print(l)
Le 27/12/2023 ZIDANE NORDINE 51
2. Les listes.
d. Listes définies “en compréhension”.
Exemple 1 (suite) : la même chose sans utiliser une définition
par compréhension.
t = (11, 22, 33,
44) l=[]
for x in t:
l.append(x**2)
print(l)
Le 27/12/2023 ZIDANE NORDINE 52
2. Les listes.
d. Listes définies “en compréhension”.
Exemple 2 : avec deux boucles “for” et une conditionnelle.
l = [(i,j) for i in range(1,4) for
j in range(1,4) if i != j]
print(l)
Le 27/12/2023 ZIDANE NORDINE 53
2. Les listes.
e. Listes multidimensionnelles.
• Comme constaté sur un exemple les éléments d’une liste
peuvent eux--mêmes être une liste.
• On peut ainsi créer des listes multidimensionnelles.
• L’accès aux élément se fait alors avec une syntaxe de la
forme :
maListe[i1][i2]...[iN]
Le 27/12/2023 ZIDANE NORDINE 54
2. Les listes.
e. Listes multidimensionnelles.
Remarque importante et exemple : attention à
l’initialisation des listes multimensionnelles.
plateau = [[0]*3]*4
print(plateau)
plateau[3][2] = 666
print(plateau)
Le 27/12/2023 ZIDANE NORDINE 55
2. Les listes.
e. Listes multidimensionnelles.
Remarque importante et exemple (suite) : attention
à l’initialisation des listes multimensionnelles.
plateau = [[0]*3 for i in
range(4)] print(plateau)
plateau[3][2] = 666
print(plateau)
Le 27/12/2023 ZIDANE NORDINE 56
2. Les listes.
e. Listes multidimensionnelles.
Remarque : le parcours de listes
multidimensionnelles se fera en imbriquant des boucles
for.
plateau = [[0]*3 for i in
range(4)] plateau[3][2] = 666
for ligne in
plateau: for x
in ligne:
print(x,' ',end='')
print('\n')
Le 27/12/2023 ZIDANE NORDINE 57
2. Les listes.
f. Exercice.
Exercice : écrire une fonction prenant une séquence de
nombre entiers en paramètre, et qui retourne une liste de
booléens de la même taille. Le i--ème élément de cette liste
retournée vaudra “true” si le i--ème élément du paramètre
est pair, et “false” sinon.
Le 27/12/2023 ZIDANE NORDINE 58
2. Les listes.
f. Exercice.
Solution :
def parite(s):
return [(n%2 == 0) for n
in s]
monTuple = (-4, 5, 2, 4, 1)
print(parite(monTuple))
Le 27/12/2023 ZIDANE NORDINE 59
2. Les listes.
Fin de ce chapitre
Avez – vous des questions ?
Le 27/12/2023 ZIDANE NORDINE 60
ENSAM RABAT
Structures séquentielles de données.
3. LES
T--UPLES.
Le 27/12/2023 ZIDANE NORDINE 61
3. Les
t--uples.
Plan de ce chapitre
a. Les t--uples sont immuables.
b. Opérations propres aux t--uples.
c. Intérêts des t--uples.
d. Fonctions avec nombre variable de
paramètres.
e. Exercices.
Le 27/12/2023 ZIDANE NORDINE 62
3. Les
t--uples.
a. Les t--uples sont
immuables.
Deux conséquences de l’immuabilité des t--uples :
1. On ne peut pas modifier les éléments d’un
t--uple, en supprimer, en ajouter d’autres.
2. Un t--uple transmis en paramètre à une fonction ne peut
être modifiée par cette dernière.
Le 27/12/2023 ZIDANE NORDINE 63
3. Les
t--uples.
a. Les t--uples sont
immuables.
Exemple de non modification d’un t--uple par une fonction
:
defswap(l,i,j):
l[i], l[j] = l[j], l[i]
monTuple = (1, 2, 3, 4)
print("avant échange :",monTuple)
swap(monTuple,0,3)
print("après échange :",monTuple)
Le 27/12/2023 ZIDANE NORDINE 64
3. Les
t--uples.
b. Opérations propres aux
t--uples.
Opération de création d’un t--uple :
Permet de transformer une séquence en un
t--uple
monTuple = tuple(maSéquence)
Le 27/12/2023 ZIDANE NORDINE 65
3. Les
t--uples.
b. Opérations propres aux
t--uples.
Exemples :
>>>monTuple = tuple(range(0,9,2))
>>>monTuple
(0, 2, 4, 6, 8)
>>>monTuple = tuple("The Decemberist")
>>>monTuple
('T', 'h', 'e', ' ', 'D', 'e', 'c', 'e',
'm', 'b', 'e', 'r', 'i', 's', 't')
Le 27/12/2023 ZIDANE NORDINE 66
3. Les
t--uples.
c. Intérêts des
t--uples.
• Si on veut définir une séquence de données que l’on ne
veut pas modifier, utiliser un t--uple sécurise ce fait.
• Itérer sur les éléments d’un t--uple est plus rapide que sur
ceux d’une liste.
• Une fonction qui retourne “plusieurs valeurs”, retourne en
fait un t--uple.
• Les t--uples peuvent être utilisés comme des
clés de dictionnaire (voir module 7).
Le 27/12/2023 ZIDANE NORDINE 67
3. Les
t--uples.
d. Fonctions avec nb. variable de para.
Principe :
• En Python, une fonction peut admettre un nombre
variable de paramètres.
• Ceux--ci ne possèdent pas de noms individuels, et la
fonction les traite alors comme étant regroupés dans un
t--uple.
Le 27/12/2023 ZIDANE NORDINE 68
3. Les
t--uples.
d. Fonctions avec nb. variable de para.
Syntaxe :
def
maFonction(para1,para2,...,*args):
bloc d’instructions de la fonction
traitant les paramètres 1,2 etc.
ainsi que les paramètres en nombre
variable regroupés dans le t-uple
nommé ici « args ».
return valeur
Le 27/12/2023 ZIDANE NORDINE 69
3. Les
t--uples.
d. Fonctions avec nb. variable de para.
Exemple :
def relations(ami,*args):
for i,name in enumerate(args):
print("mon",ami,"n°",i+1,":",name)
relations("ami","mick","keith","ron")
relations("ennemi","john","paul")
Le 27/12/2023 ZIDANE NORDINE 70
3. Les
t--uples.
e. Exercices.
Exercice : écrire une fonction calculant le produit
d’un nombre variable de paramètres.
Le 27/12/2023 ZIDANE NORDINE 71
3. Les
t--uples.
e. Exercices.
Solution :
def produit(*nombres):
p = 1
for x in
nombres: p
*= x
return p
print(produit(2,-4,5,3))
Le 27/12/2023 ZIDANE NORDINE 72
3. Les
t--uples.
e. Exercices.
Exercice : en utilisant le t--uplet ('a', 'e', 'i', 'o', 'u'), écrire une
fonction calculant le nombre de voyelles d’un texte.
Le 27/12/2023 ZIDANE NORDINE 73
3. Les
t--uples.
e. Exercices.
Solution :
def voyelles(mot):
t = ('a','e','i','o','u')
s = 0
mot = mot.lower()
for x in t:
s += mot.count(x)
return s
print(voyelles('Alamo'))
Le 27/12/2023 ZIDANE NORDINE 74
3. Les
t--uples.
Fin de ce chapitre
Avez – vous des questions ?
Le 27/12/2023 ZIDANE NORDINE 75
Félicitations
Vous avez suivi avec succès le
chapitre n°4
Structures séquentielles de données
Le 27/12/2023 ZIDANE NORDINE 76
Fin
Le 27/12/2023 ZIDANE NORDINE 77
Structures séquentielles de
données.
Récursivité.
Le 27/12/2023 ZIDANE NORDINE 78