Livre_silo 30 août 2013 16:32 Page 163
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
163
6 – Notions de complexité et algorithmique sur les tableaux
Plus simplement, on peut utiliser la construction par compréhension pour faire la même
chose :
def creer_matrice(n, p, v):
return [[v] * p for i in range(n)]
On pourrait penser que, plus simplement encore, l’expression [[v] * p] * n suffit à
construire cette matrice, mais ce n’ est pas le cas, comme expliqué en détail page 161.
6.5.2 Copie
Si on veut copier une matrice m de dimensions (n, p), il faut prendre soin de copier chacune
de ses n lignes, pour obtenir autant de nouveaux tableaux. De manière élémentaire, on
commence par construire un tableau r de taille n initialisé à None :
def copie_matrice(m):
n = len(m)
r = [None] * n
Puis on affecte chaque ligne r[i] avec une copie de la ligne m[i] obtenue en utilisant la
notation m[i][:] :
for i in range(n):
r[i] = m[i][:]
return r
Là encore, on peut utiliser la notation par compréhension, pour réécrire plus simplement
cette fonction :
def copie_matrice(m):
return [m[i][:] for i in range(len(m))]
Quelle que soit la solution retenue, elle convient pour toutes les matrices dont les éléments
sont des types simples (entiers, flottants, booléens). Plus généralement, elle convient pour
toutes les matrices dont les éléments sont immuables, par exemple les chaînes de caractères.
ATTENTION Matrices dont les éléments sont de type composé
Dans le cas où les éléments d’une matrice ne sont pas d’un type simple, par exemple s’il
s’agit de tableaux, alors la fonction copie_matrice ne va pas copier ces éléments, mais ils
seront partagés entre la matrice et sa copie.
figures/partage4.pdf
Voir l’exercice 6.32.
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
163
6 – Notions de complexité et algorithmique sur les tableaux
Plus simplement, on peut utiliser la construction par compréhension pour faire la même
chose :
def creer_matrice(n, p, v):
return [[v] * p for i in range(n)]
On pourrait penser que, plus simplement encore, l’expression [[v] * p] * n suffit à
construire cette matrice, mais ce n’ est pas le cas, comme expliqué en détail page 161.
6.5.2 Copie
Si on veut copier une matrice m de dimensions (n, p), il faut prendre soin de copier chacune
de ses n lignes, pour obtenir autant de nouveaux tableaux. De manière élémentaire, on
commence par construire un tableau r de taille n initialisé à None :
def copie_matrice(m):
n = len(m)
r = [None] * n
Puis on affecte chaque ligne r[i] avec une copie de la ligne m[i] obtenue en utilisant la
notation m[i][:] :
for i in range(n):
r[i] = m[i][:]
return r
Là encore, on peut utiliser la notation par compréhension, pour réécrire plus simplement
cette fonction :
def copie_matrice(m):
return [m[i][:] for i in range(len(m))]
Quelle que soit la solution retenue, elle convient pour toutes les matrices dont les éléments
sont des types simples (entiers, flottants, booléens). Plus généralement, elle convient pour
toutes les matrices dont les éléments sont immuables, par exemple les chaînes de caractères.
ATTENTION Matrices dont les éléments sont de type composé
Dans le cas où les éléments d’une matrice ne sont pas d’un type simple, par exemple s’il
s’agit de tableaux, alors la fonction copie_matrice ne va pas copier ces éléments, mais ils
seront partagés entre la matrice et sa copie.
figures/partage4.pdf
Voir l’exercice 6.32.
