len() BUILT-IN
DEFINICIÓN
Python Devuelve el número de elementos de una lista, string,
diccionario o cualquier secuencia.
Ref. ⚠ No usar en enteros: len(5) da TypeError.
EJEMPLO
Tarjetas de referencia rápida · Curso SoiTTech
carpetas = ["101", "205", "310"]
▸ · Ronqui ·
print(len(carpetas)) # → 3
Built-ins · Listas · Lógica · Patrones · Pseudocódigo
range() BUILT-IN enumerate() BUILT-IN
SINTAXIS DEFINICIÓN
range(fin) Agrega un índice automático a cada elemento al iterar.
range(inicio, fin) Devuelve tuplas (índice, valor).
range(inicio, fin, paso)
⚠ Devuelve tupla — debes desempacar: for i, val in
enumerate(...)
⚠ El fin NUNCA se incluye. range(1,23) → 1 al 22.
EJEMPLO
EJEMPLO
productos = ["Cemento", "Arena"]
for i in range(0, fecha_final - fecha_inicio):
for i, prod in enumerate(productos, start=1):
meta = meta_dia * (i + 1)
print(f"{i}. {prod}")
zip() BUILT-IN sum / max / min BUILT-IN
DEFINICIÓN DEFINICIÓN
Une dos o más listas elemento por elemento. Se sum() suma todos los elementos. max() devuelve el
detiene cuando la lista más corta termina. mayor. min() devuelve el menor.
⚠ Dos listas relacionadas → zip. Una sola lista → for
EJEMPLO
normal.
ventas = [320, 150, 480, 210]
EJEMPLO print(sum(ventas)) # 1160
print(max(ventas)) # 480
for vendedor, venta in zip(vendedores, ventas):
print(min(ventas)) # 150
estado = "✅" if venta >= meta else "❌"
prom = sum(ventas) / len(ventas) # 290.0
print(f"{vendedor} {estado}")
sort() vs sorted() BUILT-IN append / insert / extend LISTA
DIFERENCIA CLAVE AGREGAR ELEMENTOS
sort() modifica la lista original. sorted() devuelve una [Link](x) # al final
lista nueva sin tocar la original. [Link](i, x) # en posición i
[Link]([a,b]) # agrega varios
⚠ ¿Necesito conservar el orden original? → sorted(). Si no
→ sort()
⚠ append() es para listas. add() es para sets.
EJEMPLO
estados = ["pendiente"]
original = [3, 1, 4, 1, 5]
[Link]("aprobada")
nueva = sorted(original) # original intacta
# ["pendiente", "aprobada"]
[Link]() # original modificada
remove / pop / clear LISTA index / count / in LISTA
ELIMINAR ELEMENTOS BUSCAR ELEMENTOS
[Link](x) # 1ra ocurrencia [Link](x) # posición de x
[Link](i) # por índice → retorna [Link](x) # veces que aparece
[Link]() # último elemento x in lista # True/False
[Link]() # vacía la lista
EJEMPLO
⚠ remove() lanza error si el valor no existe.
estados = ["pend", "aprob", "pend"]
[Link]("pend") # → 2
[Link]("aprob") # → 1
"pend" in estados # → True
Slicing [ : ] LISTA List comprehension LISTA
SINTAXIS SINTAXIS
lista[inicio:fin] # fin no incluido [expr for var in iterable]
lista[inicio:fin:paso] [expr for var in iterable if cond]
lista[:3] # primeros 3
lista[2:] # desde índice 2 EJEMPLO
lista[-2:] # últimos 2
lista[::-1] # invertida # Aprobados de la lista
aprobados = [e for e in estados
⚠ [-2:] son los ÚLTIMOS 2, no desde la posición 2. if e == "aprobada"]
# Con zip y filtro
cumplen = [n for n, v in zip(nombres, valores)
if v >= meta]
set() LISTA → SET True / False LÓGICA
DEFINICIÓN VALORES QUE ACTÚAN COMO FALSE
Elimina duplicados de una lista. Los sets no garantizan 0, 0.0, "", [], {}, None # → False
orden y no permiten repetidos. 1, -1, "hola", [1,2] # → True
0 == False # → True ← sorpresa!
⚠ set() vacío: set() — no {}. Las llaves {} solas crean un
diccionario.
⚠ El if evalúa True/False. Todo en Python es truthy o falsy.
EJEMPLO
estados = ["pend","aprob","pend"]
sin_rep = set(estados)
# {'aprob', 'pend'}
s = set() # set vacío correcto
[Link]("nuevo")
and / or / not LÓGICA == vs is LÓGICA
REGLA RÁPIDA DIFERENCIA
and → exigente, una False tumba todo. or → generoso, == compara valores. is compara identidad en memoria.
una True activa todo. not → invierte. Usar is solo con None, True, False.
⚠ Nunca usar is para comparar strings o números.
True and False # → False
True or False # → True
not True # → False a = [1,2,3]; b = [1,2,3]
# Prioridad: not → and → or a == b # True (mismo valor)
True or False and False a is b # False (objetos distintos)
# = True or (False and False) = True x = None
x is None # ✅ forma correcta
Prioridad operadores LÓGICA Patrón: nombre por valor PATRÓN
DE MAYOR A MENOR PROBLEMA
1. () # paréntesis — siempre primero Tienes dos listas relacionadas. Necesitas el nombre del
2. ** # potencia mayor/menor valor.
3. *, /, //, % # multiplicación
4. +, - # suma SOLUCIÓN
5. ==,!=,>,< # comparación
pos = [Link](max(valores))
6. not # negación
nombre = nombres[pos]
7. and # y lógico
8. or # o lógico
# Ejemplo real:
ventas = [320, 150, 480, 210]
⚠ Cuando dudes — usa paréntesis. No cuestan nada.
vendedores = ["Ana","Luis","Marta","Jorge"]
pos = [Link](max(ventas))
mejor = vendedores[pos] # → "Marta"
Patrón: zip + filter PATRÓN Patrón: acumular en for PATRÓN
PROBLEMA PROBLEMA
Tienes dos listas paralelas y quieres filtrar una según Clasificar elementos de una lista en grupos según
condición de la otra. condición.
⚠ Inicializar las listas ANTES del for, no dentro.
SOLUCIÓN
[nombre for nombre, val in SOLUCIÓN
zip(nombres, valores) if val >= meta]
aprobadas = []
# Ejemplo: pendientes = []
cumplen = [n for n, v in for estado in estados:
zip(analistas, prod) if v >= meta] if estado == "aprobada":
no_cumplen = [n for n, v in [Link](estado)
zip(analistas, prod) if v < meta] else:
[Link](estado)
Patrón: enum + zip PATRÓN Patrón: ternario PATRÓN
PROBLEMA DEFINICIÓN
Necesitas índice + dos listas a la vez en un reporte Asigna uno de dos valores según condición en una sola
numerado. línea. Equivale a if/else en una línea.
⚠ Los paréntesis en (a, b) son obligatorios para
SINTAXIS + EJEMPLO
desempacar el zip.
valor = a if condicion else b
SOLUCIÓN
# En reporte:
for i, (nombre, val) in
estado = "✅ Cumplió" if v >= meta \
enumerate(zip(nombres, vals), start=1):
else "❌ No cumplió"
print(f"{i}. {nombre} — {val}")
# En comprehension:
# Con 3 listas:
["✅" if t <= 5 else "❌" for t in tiempos]
for i, (e, c, d) in enumerate(
zip(etapas, carpetas, dias), 1):
Patrón: reporte conteo PATRÓN Patrón: capacidad vs PATRÓN
PROBLEMA demanda
Necesitas estadísticas rápidas (totales, porcentajes) de PROBLEMA
una lista de estados. Comparar lo que el equipo puede producir contra lo que
se necesita. Identificar riesgos.
SOLUCIÓN
SOLUCIÓN
total = len(estados)
aprobadas = [Link]("aprobada") capacidad = [m*d for m, d in
pendientes = [Link]("pendiente") zip(metas_dia, dias)]
pct = aprobadas / total diferencia = [c-x for c, x in
print(f"Avance: {pct:.1%}") zip(capacidad, carpetas)]
en_riesgo = [e for e, d in
# Bandeja analista: zip(etapas, diferencia) if d < 0]
bandeja = ([Link]("asignada") # d < 0 → no alcanza la capacidad
+ [Link]("devuelta"))
Entrada→Proceso→Salida LÓGICA Pseudocódigo LÓGICA
ESQUEMA BASE DE TODO PROGRAMA VOCABULARIO ESENCIAL
# Antes de escribir código pregunta: RECIBIR / MOSTRAR / RETORNAR
ENTRADA → ¿qué datos recibo? SI / SINO SI / SINO
PROCESO → ¿qué hago con ellos? PARA cada X en Y:
SALIDA → ¿qué resultado entrego? MIENTRAS condición:
FUNCIÓN nombre(params):
TIPOS DE ENTRADA Y / O / NO → and / or / not
SALIR / CONTINUAR → break / continue
1. Hardcodeada (x = 5) · 2. Del usuario (input()) · 3.
Externa (Excel, BD) ⚠ Regla: si no puedes explicarlo en pseudocódigo, no lo
escribas en Python.
Descomposición LÓGICA f-strings formato STRING
REGLA DE UNA RESPONSABILIDAD ESPECIFICADORES DE FORMATO
Si describes un bloque y usas la palabra "y", necesitas f"{valor:,}" # miles: 5,015
partirlo en dos. f"{valor:.2f}" # decimales: 3.14
f"{valor:.1%}" # porcentaje: 37.5%
CHECKLIST ANTES DE CODIFICAR f"{valor:+}" # signo: +265 / -500
f"{texto:<{COL}}" # izquierda N chars
□ ¿Entiendo el problema en 1 frase?
f"{texto:>{COL}}" # derecha N chars
□ ¿Identifiqué E→P→S?
f"{texto:^{COL}}" # centrado
□ ¿Descompuse en partes pequeñas?
□ ¿Escribí pseudocódigo del difícil?
□ ¿Verifiqué con números reales?
□ ¿Pensé en qué puede salir mal?
[Link] LIBRERÍA
ESTRUCTURA BÁSICA
from [Link] import Table
from [Link] import Console
t = Table(title="Reporte")
t.add_column("Col", justify="center")
for fila in datos:
t.add_row(f"{fila}")
Console().print(t)
⚠ add_row() solo acepta strings — usar f-strings para
convertir.