8. Métodos

8.4. Método remove

El método remove() se utiliza para eliminar la primera aparición del elemento con el valor especificado. Si no se encuentra el elemento en la lista, se producirá un error.

Su argumento  indica el nombre del elemento , NO la posición.

Ejemplo:  

Figura 1

OBSERVACIÓN: Se debe indicar el elemento,  NO el índice!!

  • ¿El argumento que recibe remove() de que tipo puede ser? ¿Entreo, Real, String?
  • ¿Qué pasa si el argumento no se encuentra en la lista?
  • ¿Podría verificar si el argumento se encuentra en la lista?

Código para pensar.

El siguiente ejercicio..no tiene error de lógica aparente.. pero no hace lo que se espera: 

L=[1,2,3,4,3,5,6,3,3,7,3,3,3,3] # el 3 aparece 5 veces y quiero eliminarlos.
#voy a eliminar el 3 de la lista, con el método remove().
print("Lista inicial: ", L)
for i in L:
    if i==3:
        L.remove(3)
print("Elimino un 3", L)
#Muestro la lista sin los 3, almenos eso creo.
print(L)
 
La salida sería:
Lista inicial: [1, 2, 3, 4, 3, 5, 6, 3, 3, 7, 3]
Elimino un 3 [1, 2, 4, 3, 5, 6, 3, 3, 7, 3]
Elimino un 3 [1, 2, 4, 5, 6, 3, 3, 7, 3]
Elimino un 3 [1, 2, 4, 5, 6, 3, 7, 3]
Elimino un 3 [1, 2, 4, 5, 6, 7, 3]
[1, 2, 4, 5, 6, 7, 3]
Podemos ver que el último 3 no se elimina, la pregunta es por que?
Al eliminar un elemento con remove, los elementos siguientes se corren una posición hacia la izquierda y la lista pasa a tener MENOS elementos o ser una dimensión menor , pero el índice igual sigue avanzando. Entonces el elemento que quedó "pegado" al eliminado se saltea, pero como no es 3, no nos damos cuenta, sigue en la lista. Al llegar al final ese índice NO existe, por que la lista es ahora menor!!
Por eso NO elimina el último
 
Si se usara esta lista: L=[1,2,3,4,3,5,6,3,3,7,3,3,3,3] ,la salida mostaría que los
ultimos 3s no se borran, esta sería la salida para esta lista.
[1, 2, 4, 5, 6, 7, 3, 3, 3]
Entonces la lista actual NO tiene la misma cantidad de elementos que la actual.
 
Aqui mostramos 2 soluciones distintas.

Opción 1: recorrer una copia de la lista

L = [1, 2, 3, 4, 3, 5, 6, 3, 3, 7, 3]  # el tres aparece 5 veces

print("Lista inicial:", L)

for i in L[:]:  # L[:] crea una copia; recorremos la copia y modificamos el original, no tenemos en cuenta los índices.
    if i == 3:
        L.remove(3)

print("Lista sin los 3:", L)

Opción 2: while mientras exista un 3, sin indices.

L = [1, 2, 3, 4, 3, 5, 6, 3, 3, 7, 3]

print("Lista inicial:", L)

while 3 in L: #aqui NO usamos los indices!!
    L.remove(3)

print("Lista sin los 3:", L)

Las dos dan como resultado: [1, 2, 4, 5, 6, 7] como se espera.