¿Existe una forma sencilla de eliminar un elemento de la lista por valor?
Quiero eliminar un valor de una lista si existe en la lista (lo cual puede que no exista).
a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
Lo anterior da el error:
ValueError: list.index(x): x not in list
Entonces tengo que hacer esto:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
¿Pero no existe una manera más sencilla de hacer esto?
Para eliminar la primera aparición de un elemento, utilice list.remove
:
>>> xs = ['a', 'b', 'c', 'd']
>>> xs.remove('b')
>>> print(xs)
['a', 'c', 'd']
Para eliminar todas las apariciones de un elemento, utilice una lista por comprensión :
>>> xs = ['a', 'b', 'c', 'd', 'b', 'b', 'b', 'b']
>>> xs = [x for x in xs if x != 'b']
>>> print(xs)
['a', 'c', 'd']
Por lo general, Python generará una excepción si le dices que haga algo que no puede hacer, por lo que tendrás que hacer una de las dos cosas:
if c in a:
a.remove(c)
o:
try:
a.remove(c)
except ValueError:
pass
Una excepción no es necesariamente algo malo siempre que sea algo que usted espera y maneja adecuadamente.
Tu puedes hacer
a=[1,2,3,4]
if 6 in a:
a.remove(6)
pero arriba es necesario buscar 6 en la lista 2 veces, así que intentar excepto sería más rápido
try:
a.remove(6)
except:
pass
Considerar:
a = [1,2,2,3,4,5]
Para eliminar todas las ocurrencias, puede usar la función de filtro en Python. Por ejemplo, se vería así:
a = list(filter(lambda x: x!= 2, a))
Por lo tanto, mantendría todos los elementos de a != 2
.
Para simplemente sacar uno de los elementos use
a.remove(2)