Eliminar elemento repetido de una lista en Python
Las listas en Python son objetos dinámicos, admiten valores de diferentes tipos y poseen diferentes métodos que nos permiten realizar una variada cantidad de operaciones, como se explica en Listas en Python.
Descripción del tema: dada una lista de números, algunos repetidos, se le pregunta al usuario cuál desea eliminar y el programa debe eliminar todos los elementos de la lista que sean igual al número ingresado por el usuario. El programa debe mostrar en pantalla primero la lista actual con los elementos que posee.
Código fuente
#!/usr/bin/env python def removeItems(lst, item): for i in lst[:]: if i == item: lst.remove(item) return lst lst = [2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90, 5] print("Lista actual: {}".format(lst)) item = int(input("\nIngrese el elemento que desea eliminar: ")) print("Lista modificada: {}".format(removeItems(lst, item)))
Para recordar: La línea #!/usr/bin/env python
es muy famosa en todos los sistemas Tipo Unix, se llama Shebang y permite ejecutar programas que requieren de un intérprete, directamente sobre la línea de comandos sin necesidad de escribir el nombre del intérprete.
Con la línea Shebang | Sin la línea Shebang |
./EliminarElemento.py | python EliminarElemento.py |
Función removeItems()
def removeItems(lst, item): for i in lst[:]: if i == item: lst.remove(item) return lst
Esta función tiene todo el código útil para cumplir su labor y recibe 2 argumento, el primero es la lista que contiene los elementos (llamada lst) y el segundo es el elemento que deseamos eliminar (llamado item).
Iterando sobre la lista
for i in lst[:]: if i == item: lst.remove(item)
Con el bucle for vamos a iterar sobre una copia de la lista creada usando la operación de rebanada (o slice, en inglés) lst[:]
y cada elemento es asignado a la variable i. La sentencia if evalúa si el elemento en la variable i es el mismo en la variable item y luego lo eliminamos usando el método remove().
Devolviendo la lista
return lst
Por último retornamos la lista sin el elemento ingresado por el usuario y los elementos repetidos.
Creando lista
lst = [2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90, 5]
Para este tema he creado una lista con valores predefinidos que pueden estar repetidos, pero también se puede crear con valores al azar o ingresados por el usuario o quizas una lista generada del análisis hecho a otras fuentes de datos.
Mostrando lista actual
print("Lista actual: {}".format(lst))
Antes de realizar cualquier operación, le mostramos al usuario que valores se encuentran en la lista actual. El método .format() formatea el string reemplazando el par de “{}” por el contenido que se encuentra en la lista.
Solicitando y leyendo el elemento a eliminar
item = int(input("\nIngrese el elemento que desea eliminar: "))
Con la función input() el programa solicita y lee el elemento que el usuario desea eliminar, luego lo convertimos con la función int() en tipo entero debido a que la función input lee todo en tipo string y se asigna el valor a la variable item.
Llamando a la función removeItems() y mostrando el resultado
print("Lista modificada: {}".format(removeItems(lst, item)))
Primero es llamada la función removeItems() pasando la lista y el elemento que se desea eliminar, nos devuelve como resultado la lista modificada sin el elemento ingresado por el usuario y sus elementos repetidos; y luego mostramos el resultado en pantalla con la función print().
Ejecutando el programa
Al ejecutar el programa, nos muestra un resultado similar a este:
[fixedtorres@linuxero]$ ./EliminarElementoDeUnaLista.py Lista actual: [2, 90, 89, 2, 5, 101, 90, 35, 2, 43, 89, 101, 5, 89, 90, 5] Ingrese el elemento que desea eliminar: 2 Lista modificada: [90, 89, 5, 101, 90, 35, 43, 89, 101, 5, 89, 90, 5] [fixedtorres@linuxero]$
Nos muestra la lista actual, solicita que ingresemos el elemento que deseamos eliminar y nos devuelve la lista sin el elemento que ingresamos, y si hay repetidos, los elimina. En este caso se elimina el 2 que se repite 3 veces.
Related Posts

Mostrar si un número es primo con Python

removeIf: eliminar elementos de una lista en Groovy

Hola, utilizar el método remove dentro de un for puede dar resultados inesperados si no se usa con cuidado, ya que las listas son tipos mutables y el for sólo se evalúa al principio, cuando tiene todos los elementos. Este ejemplo que pones no funciona si hay elementos a eliminar seguidos, y sólo elimina algunos, para que funcionase habría que hacer una copia de la lista o empezar a recorrer la lista por el índice final. Puedes probar con lst = [1,2,2,3,4,5] o con lst = [1,2,2,2,2,3,4,5]. Espero que te pueda ser util. Un saludo.
Saludos, Jose.
Sinceramente no me había fijado en ese detalle de los elementos repetidos consecutivamente al momento de escribir el código, fue un error mío. Ya quedó corregido.
Gracias por la observación.