Apuntes_Python/02_conceptos/02_tuples
2022-12-24 22:41:20 -03:00
..
README.md init Apuntes Python 2022-12-24 22:41:20 -03:00
tuplas.py init Apuntes Python 2022-12-24 22:41:20 -03:00

Tuplas

Las tuplas son un tipo de dato para almacernar colecciones de datos
(collection data types: List, Tuple, Set, Dictionary)

Una tupla es: ordenada, inmutable, permite elementos duplicados

Ejemplos:

Creación

# creación tupla vacía
mi_tupla = ()

# tupla con datos de distinto tipo
mi_tupla = ("Marcell", 33, 'Chillán')

# tupla con un solo elementos
mi_tupla = ('ojo la coma',)

# función tuple()
```python
mi_tupla = tuple()

# creación de tupla con un objeto iterable
mi_tupla = tuple(["Marcell", 33, "Chillán"])

Indice

# Indice 0, primer elemento
item = mi_tupla[0]
# "Marcell"

# Indice -1, último elemento
item = mi_tupla[-1]
# "Chillán"

# modficiar tupla
# error, tuples are inmutable

# iterar tupla, bucar 33
print('si') if 33 in mt else print('no')

Operaciones sobre tuplas

# largo tupla 
len(mi_tupla)

# contar existencias de un item
mi_tupla = ('a', 'b', 'd', 'd')
mi_tupla.count('d')
# 2

# obenter el indice de la primera existencia un item
mi_tupla.index('d')
# 2

# ValueError
try:
    msg = mi_tupla.index('x')
except ValueError:
    msg = 'Elemento no pertenece a la tupla'
finally:
    print(msg)

# convertir lista a tupla y viceversa
mi_lista = list(mi_tupla)
mi_tupla = tuple(mi_lista)

Slicing

# tupla[start_index:stop_index:step_index(opcional)]
a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

# Desde index 1 a 5(el último no entra en el slice)
b = a[1:5]
# [2, 3, 4, 5]

# si no se especifica inicio, considera el indice 0
b  = a[:5]
# [1, 2, 3, 4]

# si no se especifica el indice de detención, llega hasta el final
b = a[3:]
# [4, 5, 6, 7, 8, 9, 10]

# se puede especificar un indice de 'paso', para saltar cada cierta cantidad de elementos
rebanada = mi_lista[::3]
# [1, 4, 7, 10]
# o en sentido contrario
rebanada = mi_lista[::-3]
# [10, 7, 4, 1]

Empaquetado y Desempaquetado de tuplas

# empaquetado
mi_tupla = 'Marcell', 33, 'Chillán'
nombre, edad, destino = mi_tupla

# desempaquetado
mi_tupla = (0, 1, 2, 3, 4)
i1, *i2, i3 = mi_tupla # '*' representa todo lo que está en medio 
# i1 = 0
# i2 = [1, 2, 3] 
# i3 = 4

Comparativa entre lista y tupla

import sys
import timeit

# Comparativas entre tupla y lista
# (inmutable y mutable)
mi_lista = [0, 1, 2, 'hola', True]
mi_tupla = (0, 1, 2, 'hola', True)

# tamaño
sys.getsizeof(mi_lista)
# 96 bytes
sys.getsizeof(mi_tupla)
# 80 bytes


# tiempo de ejecución de 1 millón de listas y tuplas
timeit.timeit(stmt="[0, 1, 2, 3, 4, 5]", number=1000000)
# 0.08779324200440897
timeit.timeit(stmt="(0, 1, 2, 3, 4, 5)", number=1000000)
# 0.009468877004110254

Otra comparación de tamaño

from timeit import default_timer as timer

start = timer()
lista_test = [i for i in range(1_000_000)]
end = timer()
print('Segs : ', end-start)
print('Mibs : ',sys.getsizeof(lista_test)/(1024*1024))
# Mibs :  8.057334899902344
# Segs :  0.03020415200444404

start = timer()
tupla_test = tuple(i for i in range(1_000_000))
end = timer()
print('Segs : ', end-start)
print('Mibs : ',sys.getsizeof(tupla_test)/(1024*1024))
# Segs :  0.04234340200491715
# Mibs :  7.629432678222656