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' ]
.
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:]
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']
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)
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]