Apuntes_Python/02_conceptos/01_lists/README.md

213 lines
4.3 KiB
Markdown
Raw Normal View History

2022-12-24 22:41:20 -03:00
# Listas
2023-07-14 13:31:14 -04:00
Las listas son un tipo de dato que almacena colecciones de datos (collection
data type).
2022-12-24 22:41:20 -03:00
Collection data types: **List**, **Tuple**, **Set**, **Dictionary**.
2023-07-14 13:31:14 -04:00
Es ordenada, mutable y permite elementos duplicados
2022-12-24 22:41:20 -03:00
Ejemplos:
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
- [Creación](#crear-lista)
- [Explorar Lista](#explorar-lista)
- [Editar Lista](#editar-lista)
- [Slicing](#slicing)
- [Copiar Lista](#copiar-lista)
- [Comprensión de Listas](#comprensión-de-listas)
### Crear Lista
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
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
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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]
```
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
### Comprensión de lista o generador
2023-07-14 13:31:14 -04:00
2022-12-24 22:41:20 -03:00
```python
# 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
```