9.1 Creación de una copia de una lista
Crear una copia de una lista en Python es una tarea importante que puede ser necesaria para evitar cambios inesperados en los datos al manipular listas. Al trabajar con listas, es crucial entender la diferencia entre copias superficiales (shallow) y copias profundas (deep).
Copia superficial
Una copia superficial crea una nueva lista, pero los elementos siguen siendo los mismos (si los elementos son referencias, se copian como referencias). Esto se puede hacer de varias maneras:
Con la función list():
original = [1, 2, 3]
copy = list(original)
Uso de rebanadas:
original = [1, 2, 3]
copy = original[:]
Método copy():
Copia profunda
La copia profunda crea una nueva lista en la que también se crean copias de todos los objetos anidados. Esto es especialmente importante cuando las listas contienen otros tipos de datos mutables, como otras listas. Para ello, se usa el módulo copy:
import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)
Cuándo usar cada método
La copia superficial es más rápida y adecuada cuando los elementos de la lista son simples o no requieren duplicación (por ejemplo, cadenas o números). La copia profunda es necesaria cuando los elementos de la lista son, en sí mismos, colecciones mutables o cuando los cambios en la copia no deben reflejarse en el original.
9.2 Eliminación de un elemento de una lista
Hay una tarea simple pero a la vez compleja: eliminar un(os) elemento(s) de una lista en un ciclo.
Cuando recorremos una lista usando un ciclo for, la lista devuelve un objeto hijo especial — un iterador, que se utiliza en el ciclo for para recorrer todos sus elementos. Y si durante el uso del iterador [en el ciclo for] se elimina un elemento de la lista, el iterador puede funcionar incorrectamente.
Si eliminaste el 3er elemento, el 4to automáticamente se convertirá en el 3ro. Sin embargo, el ciclo for, a través del iterador, pasará al nuevo 4to elemento, que antes era el 5to. Así que el 4to elemento será saltado.
Aquí hay algunos métodos para eliminar elementos de manera segura:
Uso del método remove()
Si sabes exactamente qué elemento necesitas eliminar, puedes usar remove() dentro de un ciclo. Sin embargo, esto puede ser ineficiente si hay muchos elementos, ya que cada llamada a remove() busca el elemento antes de eliminarlo, lo que ralentiza la ejecución.
Creación de una nueva lista
Una forma más segura es crear una nueva lista solamente con los elementos que necesitas conservar:
original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0] # conservamos solo los números impares
Uso de índices
Puedes usar un ciclo for con índice inverso para eliminar elementos sin riesgo de saltarlos:
for i in range(len(original_list) - 1, -1, -1):
if original_list[i] % 2 == 0: # condición para eliminación
del original_list[i]
Cuando recorremos la lista desde el final, al eliminar elementos se cambian los índices sólo de los elementos ya pasados.
Uso de una copia de la lista:
Supón que quieres eliminar todos los números negativos de una lista:
numbers = [1, -1, 2, -2, 3, -3]
# Creamos una copia de la lista para iterar de forma segura
for number in numbers.copy():
if number < 0:
numbers.remove(number)
print(numbers) # Mostrará [1, 2, 3]
9.3 Unir listas
Muy a menudo necesitas unir dos o más listas en una sola. Esto se puede hacer de varias maneras, cada una de las cuales es adecuada para diferentes tareas y tiene sus propias características.
Uso del operador +
La forma más simple de unir dos listas es usar el operador +. Es un método directo e intuitivo:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list) # Mostrará [1, 2, 3, 4, 5, 6]
Método extend()
El método extend() modifica la primera lista, añadiendo al final todos los elementos de la segunda lista. Esto cambia la lista original:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # Mostrará [1, 2, 3, 4, 5, 6]
Comprensiones de listas (List Comprehensions)
Las comprensiones de listas pueden ser utilizadas para crear nuevas listas al unir elementos de varias listas en una sola lista compleja:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list) # Mostrará [1, 2, 3, 4, 5, 6]
Método append()
Puedes agregar todos los elementos del 2do lista al 1ro uno por uno. Bueno, como opción.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
list1.append(x)
print(list1) # Mostrará [1, 2, 3, 4, 5, 6]
En resumen, esto es todo lo que quería contarles sobre listas 😊
GO TO FULL VERSION