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 .
Nous avons déjà vu comment supprimer un seul élément d'une liste et quels sont les avantages des différentes méthodes. Notez cependant que la suppression multiple a un certain potentiel d'erreurs :
>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in indices:
... del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 7, 9]
Les éléments 3 et 8 (et non 3 et 7) de la liste originale ont été supprimés (car la liste a été raccourcie pendant la boucle), ce qui n'était peut-être pas l'intention. Si vous voulez supprimer en toute sécurité plusieurs indices, vous devriez plutôt supprimer les éléments ayant l'indice le plus élevé en premier, par exemple comme ceci :
>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in sorted(indices, reverse=True):
... del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 8, 9]
Utilisez le del
déclaration :
del listName[-N]
Par exemple, si vous voulez supprimer les 3 derniers éléments, votre code devrait être le suivant :
del listName[-3:]
Par exemple, si vous voulez supprimer les 8 derniers éléments, votre code devrait être le suivant :
del listName[-8:]
Cela dépend de ce que vous voulez faire.
Si vous voulez retourner l'élément que vous avez retiré, utilisez pop()
:
>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]
Cependant, si vous voulez simplement supprimer un élément, utilisez del
:
>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]
En outre, del
vous permet d'utiliser des tranches (par ex. del[2:]
).
Encore une autre façon de supprimer un ou plusieurs éléments d'une liste par index.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# remove the element at index 3
a[3:4] = []
# a is now [0, 1, 2, 4, 5, 6, 7, 8, 9]
# remove the elements from index 3 to index 6
a[3:7] = []
# a is now [0, 1, 2, 7, 8, 9]
a[x:y] pointe sur les éléments de l'indice x
a y-1
. Lorsque nous déclarons cette partie de la liste comme une liste vide ( []
), ces éléments sont supprimés.
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