En Python, para eliminar elementos de una lista, existe el método .pop() y el operador del. Pero cambian la lista original, lo que puede provocar errores en el código:
# Si eliminas elementos en un bucle
# el orden de la iteración se rompe
numbers = [1, 0, 2, 0, 3, 4]
for i in range(len(numbers)):
print('elem actual = ', numbers[i])
if numbers[i] == 0:
numbers.pop(i)
#=> elem actual = 1
#=> elem actual = 0
# 0
#=> elem actual = 0
# 0
#=> elem actual = 4
# IndexError: el índice de la lista está fuera de rango
En el ejemplo anterior, obtuvimos un error porque al eliminar un elemento, movemos el puntero más allá en la lista y saltamos elementos.
Sin embargo, la necesidad de eliminar elementos aparece con frecuencia. Y no se trata solo de eliminar un elemento, sino de varios a la vez siguiendo ciertas reglas. Por ejemplo, una operación común es compact, que consiste en eliminar los valores None de una lista. ¿Cómo hacerlo de manera correcta?
En la mayoría de los casos, modificar una lista implica crear una nueva lista que excluya los elementos eliminados. A continuación se muestra un ejemplo de implementación de la función compact()
def compact(coll):
# Inicialización del resultado
# Para una colección de entrada vacía, el resultado será una lista vacía
result = []
for item in coll:
if item is not None:
result.append(item)
return result
print(compact([0, 1, False, None, True, 'wow', None]))
# => [0, 1, False, True, 'wow']
print(compact([]))
# => []
Lo más importante aquí es que la lista original, coll, no se modifica. En su lugar, se crea una nueva lista, result, que solo incluye los valores que cumplen con la condición.
Así es como debes entender la frase "eliminar algo de la lista". El código que utiliza una nueva lista es menos propenso a errores, más fácil de depurar y te brinda más posibilidades de análisis. Si algo falla, siempre puedes consultar la lista original. Además, puedes observar el proceso de llenado de la lista resultante, lo que te permite verificar fácilmente si las condiciones se están aplicando correctamente.
Básicamente, el código anterior es un ejemplo de agregación. La diferencia es que, en lugar de devolver un tipo primitivo como en los ejemplos anteriores, aquí el resultado es una lista, y eso está perfecto. Como verás más adelante, el resultado puede ser incluso una estructura más compleja. La operación de reducir una lista eliminando elementos según ciertas condiciones se conoce como filtrado.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.