Académique Documents
Professionnel Documents
Culture Documents
Le module array
Le module numpy
Les matrices en python
Chapitre 3
Les listes et les matrices
26 octobre 2022
Plan
1 Les listes
Concepts fondamentaux
Accès aux composantes d’une liste
La fonction range()
Les tranches (slicing)
Fonctions communes sur les listes
Méthodes pour les listes
2 Le module array
3 Le module numpy
Plan
1 Les listes
Concepts fondamentaux
Accès aux composantes d’une liste
La fonction range()
Les tranches (slicing)
Fonctions communes sur les listes
Méthodes pour les listes
2 Le module array
3 Le module numpy
Introduction
En python, les types prédéfinis tel que : int, float, bool et str restent limités pour
résoudre des problèmes complexes. A titre d’exemple, nous citons le problème suivant :
comment peut-on modéliser (représenter dans la RAM) des objets comme :
Etudiant(nom,prénom,age,note,...)
Voiture (marque,modèle, prix,couleur,...)
Vecteur(abs, ord)
etc
Pour résoudre ce problème, l’utilisation d’une structure données est désormais
nécessaire.
Qu’est ce qu’une structure de données ?
Une structure de données consiste à utiliser un ensemble de variables pour
modéliser un tel objet.
Python offre une diversité des structures de données comme :
• listes ;
• tuples ;
dictionnaires ;
etc.
Définition
Qu’est ce qu’une liste
Une liste une structure de données ordonnées particulièrement souple.
Les listes peuvent contenir toutes sortes de données telles que : entiers, réels,
complexes, caractères, logiques, chaı̂nes de caractères, tuples, tuples,
dictionnaires, ensemble, voire d’autres listes.
Une liste est une collection ordonnée et modifiable : chaque élément est classé
selon un index numérique et peut être librement redéfini.
La numérotation des index commence à partir de zéro.
⇒ Exemple
>>> L = [1, 2, 3]
>>> type(L)
< class ′ list ′ >
Liste vide
Pour créer une liste vide il existe deux méthodes :
1 L=list() # cette fonction permet de convertir aussi n’importe quel type de
données en liste
2 L= [],
Un accès partiel
Il existe deux types d’indices pour l’accès partiel à chaque élément d’une liste :
Indiçage positif
Soit la liste suivante : L = [1, −6, 30, 26, 10] contenant n=5 valeurs
l’accès au premier élément de la liste L se fait par L[0] (L[0]=1)
l’accès au dernier élément de la liste se fait par L[n-1] (L[n-1]=10)
les listes sont des séquences modifiables, on peut changer la valeur de chaque
champ L[i]. Par exemple, L[0]=30
.
Indiçage négatif
Il existe un moyen de désigner les éléments d’une séquence en partant de la fin :
L[-1] est le dernier élément de la séquence
L[-2] est l’avant-dernier
Si k > 0, L[-k] vaut L[len(s)-k], avec len retourne le nombre des éléments de L.
.
Un accès total
Exemple 1
Copie superficielle (shallow copy)
>>> L1 = [1, 2, [5, 6, 7]]
L’accès globale à une liste consiste à affecter une >>> L2 = L1; print(L1, L2)
liste L1 à une autre liste L2, L2=L1 [1, 2, [5, 6, 7]][1, 2, [5, 6, 7]]
Mais cette affectation une copie superficielle qui >>> L2[2][0] = 10.5
pose un problème. >>> print(L1, L2)
[1, 2, [10.5, 6, 7]][1, 2, [10.5, 6, 7]]
Le test donné dans l’exemple 1 permet de
comprendre ce qui se passe :
Exemple 2
Copie en profondeur (deep copy)
import copy
Pour obtenir un comportement différent, on >>> L1 = [1, 2, [5, 6, 7]]
dispose d’un module copy qui offre une copie en >>> L2 = copy .deepcopy (a)
profondeur : >>> L2[2][0] = 3.2
L’exemple 2 permet d’illustrer ce mécanisme : >>> print(L1, L2)
[1, 2, [5, 6, 7]][1, 2, [3.2, 6, 7]]
La boucle for
L’instruction for est l’instruction idéale pour parcourir une liste :
1 Exemple 1 :
>>> L = [1, 2, 5, 6, 7]
>>> for i in range(len(L)) :
... print(L[i],end=”)
12567
2 Exemple 2 :
>>> for n in range(1, 20, 3) :
... print(n, n**2, n**3)
111
4 16 64
7 49 343
10 100 1000
13 169 2197
16 256 4096
19 361 6859
⇒ Exemples :
>>> L=[6,2,7,-10,56,13]
>>>len(L)
6
>>>min(L)
-10
>>>sum(L)
74
Les opérateurs : +, * et in
L1+L2 l’opérateur + permet de concaténer les deux listes L1 et L2.
L*i l’opérateur * permet de retourner une nouvelle liste contenant i copies de L.
x in L : retourne True si x est dans L et False sinon.
⇒ Exemples :
>>>L1=[0,2,4],L2=[1,3,5]
>>>L3=L1+L2
>>>print(L3)
[0, 2, 4, 1, 3, 5]
>>>L4=L1*3
>>>print(L4)
[0, 2, 4, 0, 2, 4, 0, 2, 4]
>>>2 in L1
True
>>>print(L1[5])
IndexError : list index out of range
Exemples
Ecrire une fonction fibonacci(N) qui prend en argument un entier
N et retourne une liste contenant les N premiers termes de la suite
de Fibonacci :
1
si n = 0
Fn = 1 si n = 1
Fn−1 + Fn−2 si n >= 2
Solution
def fibonacci(N) :
Texte result = [0, 1] # Initialisation
Texte for k in range(2, N) :
TexteTexte result.append(result[k-1] + result[k-2])
Texte return result
La définition de la fonction est proche de la défitiontion par récurrence de la suite, la
boucle for jouant le rôle de la relation de récurrence.
>>>fibonacci(16)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
Exemples
Ecrire une fonction listeAleatoire(n) qui prend un entier n en
argument et renvoie une liste de taille n contenant des nombres
entre 1 et 100 tirés au hasard. Vous utiliserez pour ce faire la
fonction randint du module random.
Solution
from random import randint
def listeAleatoire(n) :
Texte L=[] #liste vide
Texte for k in range(1, n+1) :
TexteTexte a=randint(1,100)
TexteTexte L.append(a) #L=L+[a]
Texte return L
La définition de la fonction est proche de la défition par récurrence de la suite, la
boucle for jouant le rôle de la relation de récurrence.
>>>listeAleatoire(10)
[5, 1, 13, 21, 34, 5, 89, 44, 10, 78]]
Plan
1 Les listes
Concepts fondamentaux
Accès aux composantes d’une liste
La fonction range()
Les tranches (slicing)
Fonctions communes sur les listes
Méthodes pour les listes
2 Le module array
3 Le module numpy
Remarque
Avec l’utilisation du module array, nous pouvons assurer d’avoir le même type
pour tous les élément d’un tableau.
.
Plan
1 Les listes
Concepts fondamentaux
Accès aux composantes d’une liste
La fonction range()
Les tranches (slicing)
Fonctions communes sur les listes
Méthodes pour les listes
2 Le module array
3 Le module numpy
Syntaxe
Pour déclarer un tableau en utilisant le module numpy, il faut tout d’abord charger ce
module dans la mémoire
>>>from numpy import *
Nom Tab = array ([initialisateur ], dtype)
Exemple
>>> T 1 = array ([−1, 2, 3], dtype = int) # T1 contient 3 valeurs entières.
>>> T 2 = array (range(10), dtype = float) # T2 contient 10 valeurs réelles.
.
ENSA, Khouribga 2022-2023 23/ 44
Les listes
Le module array
Le module numpy
Les matrices en python
Plan
1 Les listes
Concepts fondamentaux
Accès aux composantes d’une liste
La fonction range()
Les tranches (slicing)
Fonctions communes sur les listes
Méthodes pour les listes
2 Le module array
3 Le module numpy
Une matrice est une liste de listes qui peut être représenté
sous la forme suivante :
⇒Exemples
T=[[0]*3 for i in range(2)] A=[[-1,2,3],[6,8,10],[4,-2,0]]
TextText⇕ TextTextText⇕
T=[[0,0,0],[0,0,0]]
−1 2 3
TextText⇕
A= 6 8 10
0 0 0 4 −2 0
T =
0 0 0 A est une matrice carrée d’ordre 3
• len(T)=2 #c’est le nombre de lignes
• len(A)=3
ENSA, Khouribga 2022-2023 30/ 44
Les listes
Le module array
Le module numpy
Les matrices en python
⇒Exemples
>>>T=array([[0]*3 for i in range(3)]) >>>A=array([[-1,2,3],[6,8,10],[4,-2,0]])
>>>T >>>A
array([[0., 0., 0.], array([[-1, 2, 3],
TextT[0., 0., 0.], TextT[6., 8, 10],
TextT[0., 0., 0.]) TextT[4, -2, 0])
TextText⇕
TextTextText⇕
0 0 0 −1 2 3
T = 0 0 0 A= 6 8 10
0 0 0 4 −2 0
>>> M1 + M2
array([[3, 3, 3],
TextT[3, 3, 3],
TextT[3, 3, 3])
>>> M1 ∗ M2
array([[4, -7, -6],
TextT[0, 16, 0],
TextT[6, 20, 20])
>>> 3 ∗ M
array([[3, 6, 9],
TextT[12, 15, 18])
>>> M = array ([[−2, 20, 3], [10, −1, 6], [1, 8, 5]])
x in M : retourne True si x est appartient au tableau M et False sinon.
>>> 3 in M
True
>>> 30 in M
False
⇒Exemple :
NL=int(input(”Donnez le nombre de lignes :”))
NC=int(input(”Donnez le nombre de colonnes :”))
#Appel
M=SaisirMat(NL,NC)
ENSA, Khouribga 2022-2023 41/ 44
Les listes
Le module array
Le module numpy
Les matrices en python
⇒Exemple :
N=int(input(”Donnez l’ordre de la matrice :”))
M=[[0] for i in range(N) for i in range(N)]
#Appel
SaisirMat(M)
⇒Exemple :
1 1 1 1 1
M = 2 2 2 2 2
3 3 3 3 3
TextTextText⇕
>>>M=array([[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3]])
>>>AfficherMat(M,len(M),len(M[0]))
11111
22222
33333
ENSA, Khouribga 2022-2023 43/ 44
Les listes
Le module array
Le module numpy
Les matrices en python
⇒Exemple :
1 2 3
M = 4 5 6
7 8 9
TextTextText⇕
>>>M=array([[1,2,3],[4,5,6],[7,8,9]])
>>>AfficherMat(M)
123
456
789
ENSA, Khouribga 2022-2023 44/ 44
Les listes
Le module array
Le module numpy
Les matrices en python
⇒Code python
>>>from numpy import linalg,array
>>>A = array([[2, 4,-4,1],[3, 6, 1,-2],[-1, 1, 2,3],[1,1,-4,1]],dtype=float)
>>>b = array([[0], [-7], [4],[2]], dtype=float)
>>> solve(A, b)
array([ 1., -1., -0., 2.])
⇒Code python
>>>from numpy import *
>>>A = array([[2, 4,-4,1],[3, 6, 1,-2],[-1, 1, 2,3],[1,1,-4,1]],dtype=float)
>>>linalg.det(A)
-28.000000000000021
>>>linalg.inv(A)
array([[-3.5 , 1.5 , 0.75 , 4.25 ],
TextT[ 1.5 , -0.5 , -0.25 , -1.75 ],
TextT[-0.78571429, 0.35714286, 0.25 , 0.75 ],
TextT[-1.14285714, 0.42857143, 0.5 , 1.5 ]])