Skip to content

📙 Clase 05 — Tuplas y sets

Fase 1 · Estructuras de datos y bucles ⬅️ Volver al índice de clases

🎯 Qué aprendí

  • Tuplas: como listas pero inmutables (no se pueden cambiar). Para datos fijos.
  • Sets: colecciones sin orden y sin duplicados. Para "¿está?" y quitar repetidos.
  • Cuándo elegir cada una frente a una lista o un diccionario.

📖 PARTE TEÓRICA

📌 1. Tuplas: listas que no cambian

Una tupla es una secuencia ordenada, pero inmutable: una vez creada, no puedes agregar, quitar ni modificar sus elementos. Se escribe con paréntesis ().

python
punto = (10, 20)          # una coordenada (x, y)
print(punto[0])           # 10   (se indexa igual que una lista)
print(len(punto))         # 2

punto[0] = 99             # 💥 TypeError: 'tuple' object does not support item assignment
Lista []Tupla ()
Ordenada
Se puede modificar✅ (mutable)❌ (inmutable)
Uso típicodatos que cambiandatos fijos que van juntos (coordenadas, RGB, un registro)

💡 Usa una tupla cuando los datos van juntos y no deben cambiar: (latitud, longitud), (rojo, verde, azul), (ancho, alto). Comunica "esto es un paquete fijo".

📦 2. Desempaquetar (unpacking)

Puedes repartir una tupla en varias variables de un tiro. Es elegantísimo y lo verás en todos lados.

python
punto = (10, 20)
x, y = punto              # x=10, y=20   ← desempaquetado
print(x, y)               # 10 20

# El truco de intercambiar dos variables sin auxiliar:
a, b = 1, 2
a, b = b, a               # ahora a=2, b=1

🧪 Tip de entrevista: el for nombre, tel in filas que ves al leer una BD funciona gracias al unpacking de tuplas: cada fila es una tupla (nombre, tel) que se reparte.

⚠️ 3. El gotcha de la tupla de un solo elemento

Lo que hace una tupla es la coma, no los paréntesis.

python
uno = (5,)      # tupla de un elemento  → type: tuple
no  = (5)       # ¡NO es tupla! es solo el número 5 entre paréntesis → type: int
print(type(uno).__name__, type(no).__name__)   # tuple int

⚠️ Para una tupla de un elemento la coma es obligatoria: (5,). Sin coma, los paréntesis son solo agrupación matemática.

🎯 4. Sets: sin orden y sin duplicados

Un set (conjunto) guarda elementos únicos, sin orden y sin repetidos. Se escribe con llaves {} (como los dicts, pero sin clave: valor).

python
colores = {"rojo", "verde", "rojo", "azul"}
print(colores)           # {'rojo', 'verde', 'azul'}  ← el 'rojo' repetido desaparece
                         # (el orden NO está garantizado)

⚠️ {} vacío es un diccionario, no un set. Para un set vacío usa set().

Operaciones principales:

python
colores = {"rojo", "verde"}
colores.add("negro")         # agrega
colores.discard("rojo")      # quita sin error aunque no esté (remove sí lanza error)
print("verde" in colores)    # True   ← preguntar "¿está?" es SÚPER rápido en un set

🧮 5. Operaciones de conjuntos

Los sets brillan al comparar colecciones: unión, intersección, diferencia.

python
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)     # {1, 2, 3, 4, 5}   unión (todo)
print(a & b)     # {3}               intersección (lo que está en ambos)
print(a - b)     # {1, 2}            diferencia (lo de 'a' que no está en 'b')
OperaciónSímboloSignificado
Unióna | btodo lo de ambos
Interseccióna & blo común a ambos
Diferenciaa - blo de a que no está en b

🧹 6. El uso estrella: quitar duplicados de una lista

python
numeros = [1, 1, 2, 2, 3]
sin_repes = list(set(numeros))    # [1, 2, 3]  (convierte a set y de vuelta a lista)

🧪 Tip de entrevista: "¿Cómo quitas duplicados de una lista?" → list(set(lista)). Rápido y directo (si no importa el orden; si importa, hay otras técnicas).

🗺️ 7. Las 4 colecciones de un vistazo

ColecciónSímboloOrdenadaMutableDuplicadosAcceso por
Lista[]posición [i]
Tupla()posición [i]
Set{}(no hay índice)
Diccionario{k: v}✅*claves únicasclave [k]

📌 *Desde Python 3.7 los diccionarios conservan el orden de inserción. Los sets no garantizan orden.


🖥️ EN TU APP DE ESCRITORIO

Tuplas — aparecen constantemente en las coordenadas y tamaños de la GUI, y como el resultado de leer una BD:

python
# Colores RGB, tamaños y posiciones suelen ser tuplas:
ventana_tam = (400, 300)          # (ancho, alto)
app.geometry(f"{ventana_tam[0]}x{ventana_tam[1]}")

# Al leer de la BD, cada fila llega como TUPLA y la desempaquetas:
for nombre, tel in con.execute("SELECT nombre, tel FROM contactos"):
    ctk.CTkLabel(lista, text=f"{nombre}{tel}").pack()

Sets — para evitar duplicados sin escribir bucles de comprobación:

python
# Etiquetas/categorías únicas de tus tareas, sin repetir:
etiquetas = set()
def agregar_etiqueta(nombre):
    etiquetas.add(nombre)         # si ya existe, no pasa nada (set no repite)

# ¿El usuario ya registró este email? (evitar duplicados en un formulario)
emails_registrados = {"ana@x.com", "luis@x.com"}
nuevo = entry_email.get()
if nuevo in emails_registrados:
    label_error.configure(text="Ese email ya está registrado")

💡 Un set es tu "portero antirrepetidos": preguntar x in conjunto es la forma más limpia de validar "¿esto ya existe?" en un formulario.


🗄️ CON BASE DE DATOS (caso de uso)

  • Tuplas: son el formato por defecto en que sqlite3 te devuelve cada fila (("Ana", "999-111")). Por eso el unpacking de tuplas se vuelve pan de cada día al leer datos.
  • Sets: útiles para calcular diferencias antes de sincronizar. Ej: "¿qué IDs tengo en memoria que no están en la BD?" → ids_memoria - ids_bd.
python
ids_bd     = {1, 2, 3}
ids_memoria = {2, 3, 4}
nuevos = ids_memoria - ids_bd      # {4}  → hay que INSERT del 4

🏋️ EJERCICIOS CON SOLUCIÓN

Ejercicio 1 — Coordenada

Crea una tupla pos = (5, 8), desempácala en x e y, e imprime "x=5, y=8".

Ver solución
python
pos = (5, 8)
x, y = pos
print(f"x={x}, y={y}")   # x=5, y=8

Ejercicio 2 — Inmutable

Intenta cambiar el primer elemento de pos y explica (en comentario) qué error da.

Ver solución
python
pos = (5, 8)
# pos[0] = 99   # TypeError: 'tuple' object does not support item assignment
#               # las tuplas son inmutables: no se pueden modificar tras crearse

Ejercicio 3 — Sin repetidos

Dada votos = ["si", "no", "si", "si", "no"], obtén las opciones únicas que se votaron.

Ver solución
python
votos = ["si", "no", "si", "si", "no"]
opciones = set(votos)          # {'si', 'no'}
print(opciones)

Ejercicio 4 — Amigos en común

ana = {"cine", "leer", "correr"} y luis = {"correr", "juegos", "leer"}. ¿Qué aficiones tienen en común?

Ver solución
python
ana  = {"cine", "leer", "correr"}
luis = {"correr", "juegos", "leer"}
print(ana & luis)     # {'correr', 'leer'}   (intersección)

❓ Preguntas y respuestas (autoevaluación)

1. ¿Cuál es la diferencia clave entre lista y tupla?

La lista es mutable (cambia); la tupla es inmutable (no cambia tras crearse).

2. ¿Qué hace especial a un set frente a una lista?

No tiene orden garantizado y no admite duplicados. Ideal para "¿está?" y quitar repetidos.

3. ¿Cómo se escribe una tupla de un solo elemento y por qué?

(5,) — con coma. Sin la coma, (5) es solo el número 5; lo que crea la tupla es la coma.

4. ¿Cómo quitas los duplicados de una lista rápidamente?

list(set(lista)).


📎 Apuntes relacionados

➡️ Siguiente

Clase 06 · Slicing — cortar y voltear listas y textos con [inicio:fin].