1839 votes

Comment supprimer un élément d'une liste par index ?

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 .

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'index a[i] (en raison des listes de liens). Note : l'implémentation basée sur les tableaux fournit O(1) accès à l'index.

32voto

Kopfgeldjaeger Points 499

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]

22voto

lloydyu24 Points 345

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:]

21voto

Neil Chowdhury Points 611

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:] ).

20voto

Mayur Koshti Points 764

En général, j'utilise la méthode suivante :

>>> myList = [10,20,30,40,50]
>>> rmovIndxNo = 3
>>> del myList[rmovIndxNo]
>>> myList
[10, 20, 30, 50]

19voto

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.com

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.

Powered by:

X