""" 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 """ # 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() # creación de tupla con un objeto iterable mi_tupla = tuple(["Marcell", 33, "Chillán"]) # acceder a elemento por indice item = mi_tupla[0] # "Marcell" # acceder a elemento por indice negativo item = mi_tupla[-1] # "Chillán" # modficiar tupla # error, tuples are inmutable # iterar tupla, bucar 33 print('si') if 33 in mi_tupla else print('no') # 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 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 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 (tamaño) from timeit import default_timer as timer start = timer() lista_test = [i for i in range(1_000_000)] end = timer() print('segundos : ', end-start) # Segs : 0.03020415200444404 print('Mib : ',sys.getsizeof(lista_test)/(1024*1024)) # Mibs : 8.057334899902344 start = timer() tupla_test = tuple(i for i in range(1_000_000)) end = timer() print('segundos : ', end-start) # Segs : 0.04234340200491715 print('Kibytes : ',sys.getsizeof(tupla_test)/(1024*1024)) # Mibs : 7.629432678222656