- Tri (rapide) de la liste (d’enteirs ou de ‡ottants) : a.sort()
- Inversion de la liste : ; a.inverse()
- Suppression de l’élément en position i:del a[i] et plus généralement del a[i:j]
- Suppression de la première occurrence de x:a.remove(x)
Remarque : Les procédures tri, extend,insert,del et remove sont de type None. Exemple :
a = [4,1,3] ; a.sort() ; a.append(2) ; print(a) # a¢ che [1;3;4;2]
JCopie
b = list(a) revient à faire une copie (physique) du tableau a:
Remarque : Autre méthode possible : b = [a[i] for i in range(len(a))]
Listes et programmation orientée objet
JLa programmation procédurale maintient une séparation stricte entre code et données : Les variables d’une part, les
procédures d’autre part. Les procédures utilisent les valeurs des variables ou agissent sur les variables.
Or, il se trouve que beaucoup d’opérations sont communes à des objets du même type.
Dans un langage orienté objet, les opérations sont dé…nies en tant que propriété de l’objet. Python utilise la “dot
syntax” pour accéder aux attributs des objets, selon la syntaxe objet.methode(arguments).
Considérons les deux instructions suivantes sur la liste a:(a = a + [0]
a.append(0)
Dans les deux cas, l’e¤et est d’ajouter à la liste al’élément 0en …n de liste. Dans la seconde instruction, on applique la
méthode append à l’objet a, qui ici est une liste.
Dans le premier cas, pour créer la liste a + [0], Python crée une copie de a, auquelle il ajoute l’élément 0. Le coût est
proportionnel à la longueur de a, et l’adresse de aest donc modi…ée par l’instruction a = a + [0].
En revanche, l’instruction a.append(0) opère directement sur la liste référencée par aen lui ajoutant 0. Le coût est
constant (en fait en moyenne), et l’adresse de an’est pas modi…ée par l’instruction a.append(0).
Remarque : Considérons les deux fonctions :
def f(a) : a = a + [0]
def g(a) : a.append(0)
Autrement dit, l’instruction a = a + [0] dans fcrée une variable locale a: ainsi, la variable globale an’est pas modi…ée).
En revanche, aest un objet dans g, qui est modi…é par la procédure g(les opérations sont e¤ectuées sur l’objet, et plus
précisement sur la valeur associée à la référence de a).
JUne méthode n’est en fait rien d’autre qu’une fonction, mais une fonction qui est associée à un objet. Elle fait partie
de la dé…nition de cet objet, ou plus précisément de la classe particulière à laquelle cet objet appartient (nous étudierons
ce concept de classe plus tard).
Mettre en oeuvre une méthode associée à un objet consiste en quelque sorte à faire « fonctionner » cet objet d’une
manière particulière. Par exemple, on met en oeuvre la méthode methode4(self,...) d’un objet objet3, à l’aide d’une
instruction du type : objet3.methode4(...) , c’est-àdire le nom de l’objet, puis le nom de la méthode, reliés l’un à
l’autre par un point. Ce point joue un rôle essentiel : on peut le considérer comme un véritable opérateur.
Dans l’exemple ci-dessus, en utilisant a.append(0), on applique la méthode append à l’objet aqui est ici une liste. En
l’occurrence, la méthode append() qui est en fait une fonction spéci…que des listes, a pour e¤et d’ajouter un élément par
la …n. L’élément à ajouter est transmis entre parenthèses, comme tout argument qui se respecte.
On obtient un résultat similaire si on utilise à la place a = a + [b].
Ce procédé est moins e¢ cace, car elle consiste à redé…nir à chaque itération de la boucle une nouvelle liste a, dans laquelle
la totalité de la liste précédente est à chaque fois recopiée avant l’ajout d’un élément supplémentaire.
En revanche, lorsque l’on utilise la méthode append(), l’ordinateur procède bel et bien à une modi…cation de la liste
existante (sans la recopier dans une nouvelle variable). Cette technique s’e¤ectue (en moyenne) en temps constant.