web-dev-qa-db-fra.com

Supprimer un élément de la liste sans mutation

Suppose que tu as une liste

>>> m = ['a','b','c']

J'aimerais créer une nouvelle liste n qui contient tout sauf un élément donné dans m (par exemple l'élément 'a'). Cependant, quand j'utilise

>>> m.remove('a')
>>> m
m = ['b', 'c']

la liste d'origine est mutée (la valeur 'a' est supprimée de la liste d'origine). Existe-t-il un moyen d'obtenir une nouvelle liste sans -'a' sans transformer l'original? Donc, je veux dire que m devrait toujours être [ 'a', 'b', 'c' ], et je vais obtenir un new list, qui doit être [ 'b', 'c' ].

13
user3457749

Je suppose que vous voulez dire que vous voulez créer une nouvelle liste sans élément donné, au lieu de changer la liste originale. Une façon consiste à utiliser une compréhension de liste:

m = ['a', 'b', 'c']
n = [x for x in m if x != 'a']

n est maintenant une copie de m, mais sans l'élément 'a'.

Une autre façon serait bien sûr de copier la liste en premier

m = ['a', 'b', 'c']
n = m[:]
n.remove('a')

Si vous supprimez une valeur par index, c'est encore plus simple

n = m[:index] + m[index+1:]
20
Krumelur

Vous pouvez créer une nouvelle liste sans l'élément incriminé avec une compréhension de liste. Cela préservera la valeur de la liste d'origine.

l = ['a','b','c']
[s for s in l if s!='a']
1
Andrew Johnson

Il existe un moyen simple de le faire en utilisant la fonction intégrée: filtre.

Voici un exemple:

a = [1, 2, 3, 4]
b = filter(lambda x: x != 3,a)
0
chuck ma

Une autre approche pour comprendre la liste est numpy:

>>> import numpy
>>> a = [1, 2, 3, 4]
>>> list(numpy.remove(a,a.index(3)))
[1, 2, 4]
0
Amen