22 - Listas: eliminación de elementos

Hemos visto que una lista la podemos iniciar por asignación indicando sus elementos.

lista=[10, 20, 30, 40]

También podemos agregarle elementos al final mediante el método append:

lista.append(120)

Si ahora imprimimos la lista tenemos como resultado:

[10, 20, 30, 40, 120]

Otra característica fundamental de las listas en Python es que podemos eliminar cualquiera de sus componentes llamando al método pop e indicando la posición del elemento a borrar:

lista.pop(0)

Ahora si imprimimos la lista luego de eliminar el primer elemento el resultado es:

[20, 30, 40, 120]

Otra cosa que hay que hacer notar que cuando un elemento de la lista se elimina no queda una posición vacía, sino se desplazan todos los elementos de la derecha una posición.

El método pop retorna el valor almacenado en la lista en la posición indicada, aparte de borrarlo.

lista=[10, 20, 30, 40]
print(lista.pop(0)) # imprime un 10

Problema 1:

Crear una lista por asignación con 5 enteros. Eliminar el primero, el tercero y el último de la lista.

Programa: ejercicio108.py

Ver video

lista=[10, 20, 30, 40, 50]

print(lista)

lista.pop(0)
lista.pop(1)
lista.pop(2)

print(lista)

Parecería que con esas tres llamadas al método pop se eliminan los tres primeros elementos pero no es así, si imprimimos cada vez que borramos uno veremos que estamos borrando el primero, tercero y quinto.

lista=[10, 20, 30, 40, 50]
print(lista)
# se imprime [10, 20, 30, 40, 50]
lista.pop(0)
print(lista)
# se imprime [20, 30, 40, 50]
lista.pop(1)
print(lista)
# se imprime [20, 40, 50]
lista.pop(2)
# se imprime [20, 40]
print(lista)

Problema 2:

Crear una lista y almacenar 10 enteros pedidos por teclado. Eliminar todos los elementos que sean iguales al número entero 5.

Programa: ejercicio109.py

Ver video

lista=[]
for x in range(10):
    valor=int(input("Ingrese valor:"))
    lista.append(valor)

print(lista)

posicion=0
while posicion<len(lista):
    if lista[posicion]==5:
        lista.pop(posicion)
    else:
        posicion=posicion+1
    
print(lista)        

Mediante un for cargamos 10 elementos en la lista:

lista=[]
for x in range(10):
    valor=int(input("Ingrese valor:"))
    lista.append(valor)

Como es posible que se eliminen 0, 1, 2 etc. elementos de la lista utilizamos un ciclo while (no podemos usar un for, ya que el contador del mismo no indicará correctamente el subindice a analizar)

Llevamos un contador llamado "posicion" que nos indica que elemento de la lista estamos verificando en el if, en el caso que se debe borrar llamamos al método pop pasando el contador y no incrementamos en uno el contador "posicion" ya que los elementos de la derecha se desplazan una posición a izquierda.
En el caso que no se debe borrar se incrementa en uno el contador "posicion" para analizar el siguiente elemento de la lista en la próxima vuelta del ciclo:

posicion=0
while posicion<len(lista):
    if lista[posicion]==5:
        lista.pop(posicion)
    else:
        posicion=posicion+1

Si ejecutamos y cargamos tres cincos en distintas posiciones de la lista tenemos como resultado:

eliminar elementos de una lista

Acotación: otra forma de eliminar elementos de una lista

Para eliminar elementos de una lista también es empleada la función "del" pasando como parámetro la referencia de la componente a eliminar:

lista=[10, 20, 30, 40, 50]

print(lista)

del(lista[0])
del(lista[1])
del(lista[2])

print(lista) # 20 40

Problemas propuestos

  • Crear dos listas paralelas. En la primera ingresar los nombres de empleados y en la segunda los sueldos de cada empleado.
    Ingresar por teclado cuando inicia el programa la cantidad de empleados de la empresa.
    Borrar luego todos los empleados que tienen un sueldo mayor a 10000 (tanto el sueldo como su nombre)

    Ver video

  • Crear una lista de 5 enteros y cargarlos por teclado. Borrar los elementos mayores o iguales a 10 y generar una nueva lista con dichos valores.

    Ver video

Solución
ejercicio110.py

empleados=[]
sueldos=[]
cant=int(input("Cuantos empleados tiene la empresa:"))
for x in range(cant):
    nom=input("Ingrese el nombre:")
    empleados.append(nom)
    su=int(input("Ingrese el importe del sueldo:"))
    sueldos.append(su)

print("Listado completo de empleados")
for x in range(len(sueldos)):
    print(empleados[x],sueldos[x])

posicion=0
while posicion<len(sueldos):
    if sueldos[posicion]>10000:
        sueldos.pop(posicion)
        empleados.pop(posicion)
    else:
        posicion=posicion+1

print("Listado de empleados que cobran 10000 o menos")
for x in range(len(sueldos)):
    print(empleados[x],sueldos[x])




ejercicio111.py

lista1=[]
for x in range(5):
    valor=int(input("Ingrese valor:"))
    lista1.append(valor)

print("Lista original")
print(lista1)

lista2=[]
posicion=0
while posicion<len(lista1):
    if lista1[posicion]>=10:
        lista2.append(lista1.pop(posicion))
    else:
        posicion=posicion+1

print("Lista despues de borrar los elementos mayores o iguales a 10")
print(lista1)
print("Lista generada con los elementos mayores o iguales a 10")
print(lista2)