# 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) - [Indice](#indice) - [Operaciones sobre tuplas](#operaciones-sobre-tuplas) - [Slicing](#slicing) - [Empaquetado y Desempaquetado de tuplas](#empaquetado-y-desempaquetado-de-tuplas) - [Comparativa entre lista y tupla](#comparativa-entre-lista-y-tupla) ### Creación ```python # 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 ```python # 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 ```python # 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 ```py # 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 ```python # 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 ```python 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 ```python 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 ```