¿Existe una forma sencilla de eliminar un elemento de la lista por valor?

Resuelto zjm1126 asked hace 14 años • 27 respuestas

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?

zjm1126 avatar May 08 '10 14:05 zjm1126
Aceptado

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']
Johannes Charra avatar May 08 '2010 07:05 Johannes Charra

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.

David Webb avatar May 08 '2010 08:05 David Webb

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
YOU avatar May 08 '2010 07:05 YOU

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)
mathwizurd avatar Aug 11 '2014 19:08 mathwizurd