Question Comment puis-je supprimer un élément d'une liste par index en Python?


Comment puis-je supprimer un élément d'une liste par index en Python?

J'ai trouvé le list.remove méthode, mais dis que je veux supprimer le dernier élément, comment puis-je faire cela? Il semble que la suppression par défaut effectue une recherche dans la liste, mais je ne souhaite pas que la recherche soit effectuée.


1050
2018-03-09 18:16


origine


Réponses:


Utilisation del et spécifiez l'index de l'élément que vous voulez supprimer:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del a[-1]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8]

Prend également en charge les tranches:

>>> del a[2:4]
>>> a
[0, 1, 4, 5, 6, 7, 8, 9]

Ici est la section du tutoriel.


1211
2018-03-09 18:21



Tu veux probablement pop:

a = ['a', 'b', 'c', 'd']
a.pop(1)

# now a is ['a', 'c', 'd']

Par défaut, pop sans aucun argument supprime le dernier élément:

a = ['a', 'b', 'c', 'd']
a.pop()

# now a is ['a', 'b', 'c']

488
2018-03-09 18:17



Comme d'autres mentionné pop et del sont la façons efficaces de supprimer un élément d'index donné. Pourtant, juste pour l'achèvement (puisque la même chose peut être faite de plusieurs façons en Python):

Utilisation de tranches (cela ne permet pas de supprimer l'élément de la liste d'origine):

(Ce sera aussi la méthode la moins efficace quand on travaille avec la liste Python, mais cela pourrait être utile (mais pas efficace, je le répète) lorsqu'on travaille avec des objets définis par l'utilisateur qui ne supportent pas le pop, mais qui définissent un __getitem__ ):

>>> a = [1, 2, 3, 4, 5, 6]
>>> index = 3 # Only positive index

>>> a = a[:index] + a[index+1 :]
# a is now [1, 2, 3, 5, 6]

Remarque: S'il vous plaît noter que cette méthode ne modifie pas la liste en place comme pop et del. Il fait plutôt deux copies de listes (une depuis le début jusqu'à l'index mais sans elle (a[:index]) et un après l'index jusqu'au dernier élément (a[index+1:])) et crée un nouvel objet de liste en ajoutant les deux. Ceci est ensuite réaffecté à la variable de liste (a). L'ancien objet liste est donc déréférencé et donc récupéré (à condition que l'objet liste d'origine ne soit référencé par aucune variable autre que a).

Cela rend cette méthode très inefficace et peut également produire des effets secondaires indésirables (en particulier lorsque d'autres variables pointent vers l'objet liste original qui reste non modifié).

Merci à @MarkDickinson pour l'avoir signalé ...

Ce La réponse Stack Overflow explique le concept de tranchage.

Notez également que cela ne fonctionne qu'avec des indices positifs.

En utilisant des objets, le __getitem__ méthode doit avoir été défini et plus important le __add__ La méthode doit avoir été définie pour renvoyer un objet contenant des éléments des deux opérandes.

En substance, cela fonctionne avec n'importe quel objet dont la définition de classe est:

class foo(object):
    def __init__(self, items):
        self.items = items

    def __getitem__(self, index):
        return foo(self.items[index])

    def __add__(self, right):
        return foo( self.items + right.items )

Cela fonctionne avec list qui définit __getitem__ et __add__ méthodes

Comparaison des trois façons en termes d'efficacité:

Supposons que les éléments suivants sont prédéfinis:

a = range(10)
index = 3

le del object[index] méthode:

De loin la méthode la plus efficace. Cela fonctionne tous les objets qui définissent un __del__ méthode.

Le démontage est comme suit:

Code:

def del_method():
    global a
    global index
    del a[index]

Démontage:

 10    0 LOAD_GLOBAL     0 (a)
       3 LOAD_GLOBAL     1 (index)
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 (None)
      10 RETURN_VALUE
None

pop méthode:

Il est moins efficace que la méthode del et est utilisé lorsque vous devez obtenir l'élément supprimé.

Code:

def pop_method():
    global a
    global index
    a.pop(index)

Démontage:

 17     0 LOAD_GLOBAL     0 (a)
        3 LOAD_ATTR       1 (pop)
        6 LOAD_GLOBAL     2 (index)
        9 CALL_FUNCTION   1
       12 POP_TOP
       13 LOAD_CONST      0 (None)
       16 RETURN_VALUE

La tranche et ajouter la méthode.

Le moins efficace.

Code:

def slice_method():
    global a
    global index
    a = a[:index] + a[index+1:]

Démontage:

 24     0 LOAD_GLOBAL    0 (a)
        3 LOAD_GLOBAL    1 (index)
        6 SLICE+2
        7 LOAD_GLOBAL    0 (a)
       10 LOAD_GLOBAL    1 (index)
       13 LOAD_CONST     1 (1)
       16 BINARY_ADD
       17 SLICE+1
       18 BINARY_ADD
       19 STORE_GLOBAL   0 (a)
       22 LOAD_CONST     0 (None)
       25 RETURN_VALUE
None

Remarque: Dans les trois démontages, ignorez les deux dernières lignes qui sont essentiellement return None. De plus, les deux premières lignes chargent les valeurs globales a et index.


96
2018-06-22 15:21



pop est également utile pour supprimer et conserver un élément d'une liste. Où delfait des poubelles l'article.

>>> x = [1, 2, 3, 4]

>>> p = x.pop(1)
>>> p
    2

41
2017-10-19 13:10



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]

12
2017-10-05 12:23



Cela dépend de ce que vous voulez faire.

Si vous souhaitez renvoyer l'élément que vous avez supprimé, utilisez pop():

>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]

Cependant, si vous voulez juste supprimer un élément, utilisez del:

>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]

Aditionellement, del vous permet d'utiliser des tranches (par ex. del[2:]).


10
2017-08-11 00:17



Encore une autre façon de supprimer un élément (s) 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 vers les éléments de l'index x à y-1. Lorsque nous déclarons cette partie de la liste comme une liste vide ([]), ces éléments sont supprimés.


6
2017-10-30 09:21



Vous pourriez juste rechercher l'article que vous voulez supprimer. C'est vraiment simple. Exemple:

    letters = ["a", "b", "c", "d", "e"]
    letters.remove(letters[1])
    print(*letters) # Used with a * to make it unpack you don't have to (Python 3.x or newer)

Sortie: un c d e


6
2018-02-15 13:09



Utilisez le code suivant pour supprimer un élément de la liste:

list = [1, 2, 3, 4]
list.remove(1)
print(list)

output = [2, 3, 4]

Si vous souhaitez supprimer des données d'éléments d'index de la liste, utilisez:

list = [1, 2, 3, 4]
list.remove(list[2])
print(list)
output : [1, 2, 4]

5
2018-05-14 13:29