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.

14voto

SollyBunny Points 111

Vous pouvez simplement rechercher l'élément que vous souhaitez supprimer. C'est très 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 : a c d e

6 votes

J'aime cette solution, mais elle suppose bien sûr que votre liste ne comporte pas de doublons.

11voto

jitesh mohite Points 3119

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 voulez supprimer les données de l'élément d'index de la liste, utilisez :

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

2 votes

La condition préalable est que votre liste ne peut pas contenir de doublons.

3 votes

Il ne s'agit pas d'une suppression par index, mais d'une suppression par valeur correspondante. Cela peut être une information précieuse pour certaines personnes qui visitent cette page, mais cela ne répond pas du tout à la question du PO.

10voto

user3680588 Points 72

Comme mentionné précédemment, la meilleure pratique est del() ; ou pop() si vous avez besoin de connaître la valeur.

Une autre solution consiste à empiler à nouveau uniquement les éléments que vous souhaitez :

    a = ['a', 'b', 'c', 'd'] 

    def remove_element(list_,index_):
        clipboard = []
        for i in range(len(list_)):
            if i is not index_:
                clipboard.append(list_[i])
        return clipboard

    print(remove_element(a,2))

    >> ['a', 'b', 'd']

eta : hmm... ne fonctionnera pas avec des valeurs d'index négatives, je vais y réfléchir et mettre à jour.

Je suppose

if index_<0:index_=len(list_)+index_

le corrigerait... mais soudain cette idée semble très fragile. Une expérience de pensée intéressante cependant. Il semble qu'il devrait y avoir une façon "correcte" de faire cela avec append() / compréhension de liste.

Réflexion sur

1 votes

Quelle version de Python possède une fonction del() ? Pour cette fonction, vous fournissez la liste comme premier argument à cette fonction et ensuite l'index, ou l'index d'abord et ensuite la liste ? La fonction renvoie-t-elle l'argument liste sans l'élément, ou effectue-t-elle la suppression sur place ? Je connais la fonction del mais pas d'une fonction portant le même nom.

10voto

Jo Ja Points 93

l - liste de valeurs ; nous devons supprimer les indices de inds2rem liste.

l = range(20)
inds2rem = [2,5,1,7]
map(lambda x: l.pop(x), sorted(inds2rem, key = lambda x:-x))

>>> l
[0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

0 votes

Ne fonctionne pas, la réponse est <map at 0x7f4d54109a58> . et l est compris dans l'intervalle(0,20)

9voto

Mo Ali Points 611

Vous n'avez pas l'air de travailler avec une liste de listes, alors je vais être bref. Vous voulez utiliser pop car il va supprimer des éléments qui ne sont pas des listes, vous devriez utiliser del pour cela. Pour appeler le dernier élément en python, c'est "-1".

>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']

1 votes

pop() y del suppriment tous deux un élément à l'index fourni, indépendamment du fait que cet élément soit lui-même une liste ou non. a = [1, [2, 3], 4]; del a[1]; b = [1, [2, 3], 4]; b.pop(1); assert a == b

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