Comment supprimer un élément d'une liste par indice ?
J'ai trouvé list.remove()
mais cette méthode parcourt lentement la liste à la recherche d'un élément. par valeur .
Comment supprimer un élément d'une liste par indice ?
J'ai trouvé list.remove()
mais cette méthode parcourt lentement la liste à la recherche d'un élément. par valeur .
On peut utiliser soit del soit pop, mais je préfère del, car on peut spécifier l'index et les tranches, ce qui donne à l'utilisateur plus de contrôle sur les données.
Par exemple, en partant de la liste présentée, on peut supprimer son dernier élément avec del
comme une tranche, puis on peut retirer le dernier élément du résultat en utilisant pop
.
>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
14 votes
@smci : La liste Python est basée sur un tableau : pour supprimer un élément au milieu, vous devez déplacer tous les éléments sur la droite pour supprimer le vide ; c'est pourquoi elle est
O(n)
dans le temps.deque()
fournit des opérations efficaces aux deux extrémités mais ne fournit pas d'insertions, de consultations et de suppressions O(1) au milieu.0 votes
@J.F.Sebastian : implémentation cPython, oui, merci de me corriger. Strictement le spécification linguistique ne spécifie pas comment implémenter la liste, des implémentations alternatives pourraient choisir d'utiliser une liste liée.
0 votes
@smci : aucune implémentation pratique de Python n'utiliserait
O(n)
accès à l'indexa[i]
(en raison des listes de liens). Note : l'implémentation basée sur les tableaux fournitO(1)
accès à l'index.0 votes
@J.F.Sebastian : bien sûr. J'ai simplement noté que la spécification du langage ne le définit pas c'est un problème d'implémentation. (J'ai été surpris de constater que ce n'était pas le cas).
0 votes
@smci si vous ciblez aussi largement, je ne vois pas comment vous pouvez espérer optimiser quoi que ce soit.
0 votes
@NickT : Je mets simplement en garde pour distinguer quand quelque chose est défini par l'implémentation parce qu'il n'est pas défini dans la spécification du langage. C'est exactement ce genre d'hypothèse qui a causé des problèmes majeurs avec l'instabilité du hachage (entre les plateformes) dans la version 2.x. Évidemment, la plupart des implémentations rationnelles de la liste de Python ne choisiraient jamais la liste chaînée puisque nous voulons que les opérations de base soient O(1). C'est tout.
0 votes
En rapport : Différence entre del, remove et pop sur les listes