4.3 KiB
4.3 KiB
Listas
Las listas son un tipo de dato que almacena colecciones de datos (collection data type).
Collection data types: List, Tuple, Set, Dictionary.
Es ordenada, mutable, perite elementos duplicados
Ejemplos:
Crear Lista
mi_lista = []
mi_lista = list()
# Lista de strings
mi_lista = ["lista", "de", "strings"]
# Lista con datos de difente tipo
mi_lista = [5, True, "palabra", "palabra"]
# Lista con los mismos elementos multiples veces
mi_lista = [0] * 5 # [0, 0, 0, 0, 0]
Explorar Lista
# Largo de lista
largo_lista = len(mi_lista)
# Indice 0, primer elemento
item = mi_lista[0]
# Indice -1, último elemento
item = mi_lista[-1]
# Fuera de indice
try:
item = mi_lista[10]
except IndexError:
item = "El indice solicitado esta fuera de rango"
finally:
print(item)
# Recorrer listas
for i in mi_lista:
print(i)
# Recorrer indice y elemento
for x,i in enumerate(mi_lista):
print(f"Indice {x}: {i}")
# Comprobar si un item pertenece a la lista
if "palabra" in mi_lista:
print("si")
else:
print('no')
Editar Lista
# Añadir items (append items)
mi_lista.append("laurel")
# Insertar item en posición especifica
mi_lista[3] = "cambio"
# Obtener y emover ultimo item, pop
mi_lista.pop()
# Eliminar un item especifico (primera incidencia)
mi_lista.remove("palabra")
# Eliminar todos los elementos de la lista
mi_lista.clear()
mi_lista = [3, 2, 1, 0, 5, 6, 4, 8, 9, 7]
# Revertir orden
mi_lista.reverse()
# preservar lista original
nueva_lista = reversed(mi_lista)
# Ordernar lista
mi_lista.sort()
# preservar list original
nueva_lista = sorted(mi_lista)
# Concatenar listas
mi_lista2 = [1, 2, 3, 4]
nueva_lista = mi_lista + mi_lista2
#nueva lista = [0, 0, 0, 0, 0, 1, 2, 3, 4]
Slicing
# lista[start_index:stop_index:step_index(opcional)]
mi_lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Desde index 1 a 5(el último no entra en el slice)
rebanada = mi_lista[1:5]
# [1, 2, 3, 4]
# si no se especifica inicio, considera el indice 0
rebanada = mi_lista[:5]
# [0, 1, 2, 3]
# si no se especifica el indice de detención, llega hasta el final
rebanada = mi_lista[3:]
# [3, 4, 5, 6, 7, 8, 9]
# se puede especificar un indice de 'paso', para saltar cada cierta cantidad de elementos
rebanada = mi_lista[::3]
# [0, 3, 6, 9]
# o en sentido contrario
rebanada = mi_lista[::-3]
# [9, 6, 3, 0]
Copiar lista
lista_orig = ["platano", "cereza", "manazana"]
# esta asignación hace referencia al mismo punto en la memoria
# cualquier cambio en la list_copia afecta tb a la original.
list_copia = lista_orig
# Copiar lista en variable independiente
list_copia = list(lista_orig)
# también se puede utilizar slicing
list_copia = lista_orig[:]
Comprensión de Listas
# Simplicación de la expresión utilizada para crear listas
mi_lista = [1, 2, 3, 4, 5]
# Crear lista con los cuadrados de cada elemento de la lista original
lista_cuadrados = [i * i for i in mi_lista]
# [1, 4, 9, 16, 25]
# lista_cuadrados = []
# for i in mi_lista:
# lista_cuadrados.append(x*x)
Comprensión de lista usando una función
def cubo(i):
return i*i*i
cubos = [cubo(i) for i in range(5)]
# [0, 1, 8, 27, 64]
Comprensión de lista y condición
# compresion de lista condicional en for
impares = [i for i in range(20) if i%2!=0]
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# compresion de lista condicional en expresión
a = [1,2,3,4,5,6,7,8,9]
b = [0 if i < 5 else i for i in a]
# [0,0,0,0,5,6,7,8,9]
Comprensión de lista o generador
# en ocasiones es mejor utilizar un generador
# comprobar tiempo y uso de memoria
from timeit import default_timer as timer
import sys
start = timer()
list_compr = [i*i for i in range(1_000_000)]
end = timer()
print('segundos : ', end-start)
print('bytes : ', sys.getsizeof(list_compr))
# segundos : 0.04858550600329181
# bytes : 800984
start = timer()
obj_generador = (i*i for i in range(1_000_000))
end = timer()
print('segundos : ', end-start)
print('bytes : ', sys.getsizeof(obj_generador))
# segundos : 3.1479939934797585e-06
# bytes : 112