Apuntes_Python/02_conceptos/01_lists
2023-07-14 13:31:14 -04:00
..
listas.py init Apuntes Python 2022-12-24 22:41:20 -03:00
README.md fix typo & spacing 2023-07-14 13:31:14 -04:00

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 y permite 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