195 votes

Suppression de plusieurs éléments d'une liste

Est-il possible de supprimer plusieurs éléments d'une liste en même temps ? Si je veux supprimer les éléments aux indices 0 et 2, et que j'essaie quelque chose comme del somelist[0] suivi par del somelist[2] la seconde déclaration supprimera effectivement somelist[3] .

Je suppose que je pourrais toujours supprimer les éléments les plus élevés en premier, mais j'espère qu'il existe une meilleure solution.

2voto

graviton Points 85

Pour les indices 0 et 2 de la listeA :

for x in (2,0): listA.pop(x)

Pour certains indices aléatoires à supprimer de la listeA :

indices=(5,3,2,7,0) 
for x in sorted(indices)[::-1]: listA.pop(x)

1voto

Andrea Ambu Points 6479

Vous pouvez le faire sur une dictée, pas sur une liste. Dans une liste, les éléments sont en séquence. Dans un dict, ils ne dépendent que de l'index.

Un code simple pour l'expliquer en faisant :

>>> lst = ['a','b','c']
>>> dct = {0: 'a', 1: 'b', 2:'c'}
>>> lst[0]
'a'
>>> dct[0]
'a'
>>> del lst[0]
>>> del dct[0]
>>> lst[0]
'b'
>>> dct[0]
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    dct[0]
KeyError: 0
>>> dct[1]
'b'
>>> lst[1]
'c'

Une façon de "convertir" une liste en un dict est :

>>> dct = {}
>>> for i in xrange(0,len(lst)): dct[i] = lst[i]

L'inverse est :

lst = [dct[i] for i in sorted(dct.keys())] 

Quoi qu'il en soit, je pense qu'il est préférable de commencer à supprimer à partir de l'indice le plus élevé comme vous l'avez dit.

1voto

Je peux en fait penser à deux façons de le faire :

  1. coupez la liste comme (ceci supprime les 1er, 3ème et 8ème éléments)

    somelist = somelist[1:2]+somelist[3:7]+somelist[8 :]

  2. faire ça en place, mais un par un :

    liste de sombres.pop(2) liste de fond.pop(0)

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