Apuntes_Python/02_conceptos/02_tuples/tuplas.py
2022-12-24 22:41:20 -03:00

129 lines
3.0 KiB
Python
Executable File

"""
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