Quand on souhaite ajouter un élément à une liste en Python, il y a une différence entre la méthode append et la syntaxe avec le signe “+”.
Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: préliminaires
Étant donnée une liste L, on sait que l’on peut ajouter un élément en Python en utilisant l’une des deux solutions suivantes:
L = [] L.append('e')
ou
L = [] L += ['e']
Y a-t-il une différence entre ces deux possibilités ?
Pour le savoir, il faut décortiquer ce qu’elles font.
Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: l’opérateur “+”
Ce que fait l’opérateur “+”
L’appel de l’opérateur “+” oblige Python à créer une nouvelle liste en laissant de l’espace (à la fin de cette nouvelle liste) pour l’élément à insérer. Ensuite, la première liste est copiée dans celle fraîchement créée et enfin, l’élément est mis en dernier.
Pour résumer, quand on fait appel à l’opérateur “+”:
- la liste initiale n’est pas modifiée;
- une nouvelle liste (temporaire) est créée avec un espace en plus;
- la liste initiale est copiée dans la liste temporaire;
- le nouvel élément est inséré en fin de la liste temporaire;
- le pointeur Python (le nom de la liste initiale) est redirigé vers la liste temporaire, qui n’est du coup plus temporaire, mettant ainsi à jour l’objet PythonList.
Complexité
L’ajout de n éléments via l’opérateur “+” admet une complexité en temps en O(n²).
En effet, s’il faut ajouter n éléments, l’opération précédemment expliquée va s’effectuer 1+2+…+n fois:
- 1 fois pour le premier élément
- 2 fois pour le deuxième
- …
- n fois pour le n-ième
Or, \(1+2+\cdots+n=\frac{n(n+1)}{2}\), d’où une complexité de l’ordre de n².
Différence entre l’opérateur + et append lors de l’ajout dans une liste en Python: la méthode append
Ce que fait la méthode append
Contrairement à l’opérateur “+”, la méthode append ne crée pas de nouvelle liste. Elle crée un espace en plus à la suite de l’espace mémoire dédié à la liste à laquelle on souhaite ajouter un élément.
Complexité de la méthode append
Ajouter un élément à la suite de ce qui existe déjà a une complexité de O(1).
Conclusion: que doit-on privilégier ?
Il est évident, à la vue de la complexité des deux possibilités, que la méthode append est à privilégier à l’opérateur “+”, même si elle est plus longue à écrire. Mais ceci est valable pour un n assez grand.
Voici un graphique pour vous en convaincre:
Je dois bien dire que sur les exemples que je donne sur ce site, ma syntaxe tourne très souvent autour de l’opérateur “+” car il est bien plus facile (pour moi) d’écrire par exemple : ” L += [‘e’]” que “L.append(‘e’)”.
Vous le voyez sur le graphique ci-dessus, si n ne dépasse pas 20 000, ce n’est pas bien grave… Donc vous me pardonnerez je l’espère 🙂
Je pense donc qu’il est important de s’adapter selon ce que l’on fait. Bien évidemment, quand on travaille avec les Big Datas, la méthode append est à privilégier. Mais quand on est prof et que l’on manipule des mini-listes, on peut se permettre l’opérateur “+”. Mais chacun fait ce qu’il veut après tout…
Si vous souhaitez en savoir plus sur les liste, vous pouvez regarder du côté de cette page.