204 lines
4.3 KiB
Markdown
204 lines
4.3 KiB
Markdown
|
# 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:
|
||
|
- [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
|
||
|
```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
|
||
|
```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
|
||
|
```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
|
||
|
```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
|
||
|
```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
|
||
|
```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
|
||
|
```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
|
||
|
```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]
|
||
|
```
|
||
|
### Comprensión de lista o generador
|
||
|
```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
|
||
|
```
|