I : Quelques structures de données avec le langage Python

publicité
PC*
Structures de données
I : Quelques structures de données avec le langage Python
Pour utiliser, stocker, déclarer une suite (ordonnée ou non) de données le langage
Python ore plusieurs possibilités. On dispose d'objets aux propriétés bien dénies
et auxquels sont associés des méthodes propres à chaque objet.
Chaque objet est d'un type donné. La fonction 'type' retourne le type d'un objet.
Le typage en Python se fait au moment de l'aectation à un nom d'une variable de
son contenu. D'autres langages plus impératifs demandent de déclarer le type d'une
variable avant de lui aecter un contenu.
Les trois premières structures de base sont :
1. L'ensemble : set
S = {2, 3, 5, 2} est identique à S = {2, 3, 5} ou à S = {3, 2, 5}.
S = {} permet de déclarer un ensemble vide. type(S) retourne,dans le cas d'un
ensemble, <type 'set'>.
On peut tester si un élément est dans un ensemble ( in), ajouter, enlever un
élément d'un ensemble(méthodes add et remove).
On peut utiliser les opérations usuelle sur les ensembles, intersection, union...
union et intersection sont par exemple des méthodes de la classe 'set'.
Les ensembles sont des objets modiables. Si on dénit une copie d'un ensemble, par exemple T=copy(S), une modication de T ne modiera pas S.
Attention : l'aectation T=S crée un nouvel ensemble T qui pointe vers la
même adresse que S et donc toute modication de T modie S.
2. Les p-uplets : tuple
Un objet de la classe tuple (en français t-uplet) est une suite d'éléments quelconques, séparés par une virgule et éventuellement encadrée par des parenthèses. T=() permet de dénir un tuple vide.
Attention les trois t-uplets suivants sont bien distincts :
T 1 = (1, 2, 3) ̸= T 2 = (1, 3, 2) ̸= T 3 = (1, 2, 3, 3).
La suite des éléments qui constitue un tuple est indexée, le premier indice
étant 0. Dans l'exemple précédent on a donc : T 1[1] = 2, T 3[3] = 3, T 3[0] = 1.
Attention : un singleton est déni de la manière suivante : A = 5, ou A = (5, ).
L'écriture de la virgule est impérative.
A=5
Par exemple comparons ces deux suites d'instructions : A + 1
avec A = (5, )
A + (1, )
Un tuple (comme un ensemble ) est un objet dit itérable que l'on peut parcourir. Par exemple pour imprimer l'ensemble des éléments d'un tuple on écrira :
T=(2,4,5,7,8). for x in T : print(x)
Cette particularité peut être source d'erreurs dans l'utilisation de fonctions
ou programmes pré-dénis, comme par exemple dans la résolution d'équations
diérentielles avec odeplot.
Il est possible de convertir un tuple en ensemble en utilisant la fonction set.
Ainsi set(T ) = {8, 7, 5, 4, 2}.
La fonction len(T) retourne le nombre d'éléments d'une liste T. Si len(T)=15,
les éléments de ce tuple sont indexés de 0 à 14.
Il est possible de récupérer une "tranche" (ou slice) d'un tuple en indiquant
I.P.T.: rappels 1
PC*
Structures de données
les indices de début et de n de la partie que l'on souhaite récupérer. Mais
attention un intervalle d'entiers de type range(a,b) fait référence à la liste
des entiers k tels que a ≤ k < b. On obtient donc b − a entiers.
Si T = (1, 3, 5, 7, 7, 5) la commande T [1 : 5] va retourner un tuple dont les
éléments sont ceux de T d'indice 1 à 4.
Les tuples sont des objets immuables que l'on ne peut pas modier.
3. Les listes : list
Une liste (objet list) est une séquence indexée d'éléments séparés par une
virgule, encadrée par des crochets. La liste vide se dénit par L = [ ]. Les listes
sont des objets itérables que l'on peut parcourir comme les tuples. Mais ces
objets sont modiables. On peut leur ajouter des éléments, en supprimer,
modier un de leurs éléments etc
Une liste dont les éléments sont des listes peut permettre de représenter un
tableau bidimensionnel. Le type tableau ( array ) n'est pas directement déni avec Python et dans la pratique il faudra importer une bibliothèque de
programmes et de fonctions numpy avec la syntaxe
from numpy import *
II : Utilisation des listes
1. Atteindre un élément
◦ L[k] : retourne l'élément d'indice k de la liste L.
◦ len(L) : nombre d'éléments de la liste L.
◦ L[-1] : dernier élément de L
◦ L[-2] : avant-dernier élément de L.
◦ L[-3 :] : liste de tous les éléments de L à partir de l'antépénultième.
◦ str(L) convertit une liste en chaîne de caractère .
2. Modications
◦ L[k]=x : l'élément d'indice k est remplacé par x.
◦ L[a :b]=T : la tranche de L, les indices variant de a à b-1, est remplacée
par les éléments de T.
◦ del L[a :b] : supprime tous les éléments de L d'indice compris entre a et
b-1.
◦ del L[a :b :k] : idem mais de k en k.
◦ T1+T2 : concaténation de deux listes
3. Quelques méthodes associées aux listes
◦ L.append(x) : l'élément x est ajouté à la n de la liste L.
◦ L.extend(T) : les éléments de T sont ajoutés à ceux de L. C'est une
alternative à L+T mais qui modie L.
◦ L. count(x) : donne le nombre d'occurrences de l'éléments x dans L.
◦ L.insert(k,x) : insère dans la liste L l'élément x en position d'indice k.
I.P.T.: rappels 2
Structures de données
PC*
◦ L.remove(x) : supprime de la liste L l'élément éventuel de plus petit indice
de valeur x.
◦ L.reverse() : retourne la liste L.
◦ L. sort() : trie la liste L.
4. Copie de listes
Pour créer une liste L1 dont les éléments sont exactement ceux d'une liste
existante L on utilisera l'instruction :
L1=L[0 :len(L)]
Les modications ultérieures de L1 n'aecteront pas L. Si on avait seulement
indiqué L1=L, les deux variables L et L auraient pointé vers la même adresse
mémoire et toute modication de L aurait aecté de la même manière L.
III : Tableaux
Un tableau array est une structure de données multidimensionnelle. Si ce tableau
a une dimension on retrouve une structure analogue à une liste. Pour un tableau à
deux dimensions chaque élément est repéré par un indice dit de "ligne" , puis un
indice dit de "colonne".
Une telle structure n'est pas directement dénie avec Python. On peut éventuellement créer un tableau à partir d'une liste de liste. Le module complémentaire
numpy permet de dénir ce type de donnée.
Dans la suite on suppose qu'on a importé le module numpy sous le nom raccourci
np ce qui allègera l'appel des fonctions. On écrira donc : import numpy as np
1. Création d'un tableau
◦ On peut simplement dénir une liste de liste (python) puis convertir cette
liste en un tableau numpy par la commande np.array(a).
Par exemple : a=[[1,2],[3,4]] ; b=np.array(a).
Quelle diérence entre les deux ? type(a) ?type(b) ? Comment obtenir le
coecient 3 ?
◦ On peut utiliser des matrices pré-dénies et ensuite les modier.
np.ones(n) crée un tableau carré de taille n constitué de 1.
np.ones((n,p)) crèe un tableau avec n lignes et p colonnes composé uniquement de 1.
np.eyes(n) crèe la matrice identité de taille n.
Si T est un tableau déjà déni et si f est une fonction également dénie,
np.f(T) crèe un tableau dont tous les éléments sont les f(T[i,j]).
◦ Il est bien sûr possible de créer sa fonction f particulière pour remplir un
tableau.
◦ On utilise souvent des matrices lignes dont les éléments sont des réels
a0 , . . . , an tel que pour tout k , ak+1 − ak soit constant. (pas de la subdivision). La syntaxe de création est :
a=np.linspace(x,y,p) qui crée un tableau de p éléments dont le premier est
a0 = x, le dernier ap−1 = y ; les éléments de a sont des termes consécutifs
d'une suite arithmétique de raison (y − x)/(p − 1).
I.P.T.: rappels 3
PC*
Structures de données
2. Récupération de données dans un tableau
Dans la suite T désigne un tableau de type numpy.ndarray.
◦ T[i] retourne la ligne d'indice i de T. T[i, :] également.
◦ len(T[0]) retourne le nombre de colonnes de T. len(T) également.
◦ T[ :,j] retourne la colonne d'indice j de T.
◦ len(T[ :,0] retourne le nombre de lignes de T.
◦ on peut extraire des sous-matrices par T[a :b,c :d]
3. Opérations algébriques usuelles
Attention les commandes "intuitives" ne correspondent pas toujours au résultat attendu. Par exemple A*B retourne une matrice obtenue en faisant le
produit terme à terme des éléments de A et B. Ce n'est évidemment pas le
produit matriciel de Mn (K).
La syntaxe des fonctions particulières suivantes est numpy.linalg.'fonction'.
Mais si on a pris soin de charger toutes les fonctions de numpy par from
numpy import *, la syntaxe 'fonction'() sut.
◦ np.dot(A,B) retourne le produit des deux matrices A et B.
◦ det(A) : déterminant de la matrice carrée A.
◦ inv(A) : inverse d'une matrice inversible A.
◦ Autres : trace, matrix_ power(A,p), transpose(A) ....
IV : Autres structures
Il existe bien sûr bien d'autres structures permettant d'organiser les données, structures liées à l'organisation matérielle "physique" de l'ordinateur, liées au système
d'échange de données qu'il permet et/ou au langage de programmation utilisé.
Par exemple le 'dictionnaire' est une classe d'objet python permettant d'associer
à un ensemble de clés (keys), une ou des valeurs (value(s)). Par exemple, comme
pour un carnet d'adresses où à un nom de famille (key)on peut associer diérentes
informations (values) : prénom, adresse, numéro de téléphone, entreprise, etc.
Les bases de données permettent également de "ranger" des données correspondant à plusieurs critères et les recherches sur une base de données sont fréquentes.
Enn une structure contenant des données en 'pile' (stack) sera plus spécialement
étudiée.
I.P.T.: rappels 4
Téléchargement