347 votes

Supprimer toutes les occurrences d'une valeur dans une liste ?

En Python remove() supprimera la première occurrence de la valeur dans une liste.

Comment supprimer todos occurrences d'une valeur dans une liste ?

C'est ce que j'ai à l'esprit :

>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]

465voto

Mark Rushakoff Points 97350

Approche fonctionnelle :

Python 3.x

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]

o

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]

Python 2.x

>>> x = [1,2,3,2,2,2,3,4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]

198voto

mhawke Points 10385

Vous pouvez utiliser une liste de compréhension :

def remove_values_from_list(the_list, val):
   return [value for value in the_list if value != val]

x = [1, 2, 3, 4, 2, 2, 3]
x = remove_values_from_list(x, 2)
print x
# [1, 3, 4, 3]

102voto

Coady Points 11374

Vous pouvez utiliser l'affectation par tranche si la liste d'origine doit être modifiée, tout en utilisant une compréhension de liste efficace (ou une expression génératrice).

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> x[:] = (value for value in x if value != 2)
>>> x
[1, 3, 4, 3]

6voto

Martin Andersson Points 1869

Au détriment de la lisibilité, je pense que cette version est légèrement plus rapide car elle ne force pas le while à réexaminer la liste, faisant ainsi exactement le même travail que remove doit faire de toute façon :

x = [1, 2, 3, 4, 2, 2, 3]
def remove_values_from_list(the_list, val):
    for i in range(the_list.count(val)):
        the_list.remove(val)

remove_values_from_list(x, 2)

print(x)

3voto

Jared Burrows Points 3932

Pour supprimer toutes les occurrences en double et en laisser une dans la liste :

test = [1, 1, 2, 3]

newlist = list(set(test))

print newlist

[1, 2, 3]

Voici la fonction que j'ai utilisée pour le projet Euler :

def removeOccurrences(e):
  return list(set(e))

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