Apariencia
📙 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 assignmentLista [] | Tupla () | |
|---|---|---|
| Ordenada | ✅ | ✅ |
| Se puede modificar | ✅ (mutable) | ❌ (inmutable) |
| Uso típico | datos que cambian | datos 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 filasque 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 usaset().
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ón | Símbolo | Significado |
|---|---|---|
| Unión | a | b | todo lo de ambos |
| Intersección | a & b | lo común a ambos |
| Diferencia | a - b | lo 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ón | Símbolo | Ordenada | Mutable | Duplicados | Acceso por |
|---|---|---|---|---|---|
| Lista | [] | ✅ | ✅ | ✅ | posición [i] |
| Tupla | () | ✅ | ❌ | ✅ | posición [i] |
| Set | {} | ❌ | ✅ | ❌ | (no hay índice) |
| Diccionario | {k: v} | ✅* | ✅ | claves únicas | clave [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
setes tu "portero antirrepetidos": preguntarx in conjuntoes 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
sqlite3te 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=8Ejercicio 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 crearseEjercicio 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
- La colección mutable → Clase 01 · Listas
- La de clave-valor → Clase 04 · Diccionarios
- Desempaquetar al recorrer → Clase 02 · for
➡️ Siguiente
Clase 06 · Slicing — cortar y voltear listas y textos con [inicio:fin].