Domina cómo escribir código más pythónico transformando bucles anidados en una sola línea con list comprehension, dict comprehension y set comprehension. Verás cómo refactorizar desde un for tradicional, aplicar filtros con if, usar len para validaciones y construir objetos más claros y legibles.
¿Qué son las comprehensions en Python y para qué sirven?
Las comprehensions permiten crear listas, diccionarios y conjuntos de forma compacta y legible. En lugar de acumular valores con variables temporales y múltiples líneas, condensas la iteración, el mapeo y el filtro en una expresión clara.
Generan el mismo resultado que un for tradicional, con menos código.
Mejoran la lectura: menos ruido y menos variables temporales.
Soportan condiciones directamente en la expresión.
¿Qué piezas componen la sintaxis de una list comprehension?
Expresión de salida: qué valor quieres en la lista.
Iteración: el for que recorre los elementos.
Filtro opcional: un if para incluir o excluir.
¿Cómo refactorizar un for tradicional a una list comprehension?
Primero, extraer títulos con un for acumulando en una lista.
defextract_titles_traditional(articles):"""Extrae solo los títulos usando un for.""" titles =[]for article in articles: titles.append(article["title"])# iteración + acumulaciónreturn titles
Ahora, la misma lógica con list comprehension y retorno en una línea.
defextract_titles(articles):"""Extrae solo los títulos usando un comprehension."""return[article["title"]for article in articles]
Resultado idéntico en consola al imprimir ambos llamados.
Más limpio y directo: la firma de la función no cambia, solo la implementación.
¿Qué ventajas aporta la sintaxis compacta y el retorno en una línea?
Menos probabilidad de errores por variables intermedias.
Intención clara: mapeo de artículos a títulos.
Compatible con herramientas de formato automático, por ejemplo, Ruff ordena la expresión para mayor legibilidad.
¿Cómo aplicar filtros con if y construir objetos con dict comprehension?
Puedes incluir validaciones en la misma línea. Por ejemplo, extraer solo títulos con al menos 10 caracteres usando len y un if al final.
defextract_titles_long(articles):return[a["title"]for a in articles iflen(a["title"])>10]
Para crear un diccionario a partir de los artículos, usa dict comprehension: cada entrada tendrá llave y valor. Por ejemplo, título como llave y descripción como valor, filtrando por descripciones de longitud mínima.
# Filtra descripciones largas y construye un dict título -> descripciónlong_desc_by_title ={ a["title"]: a["description"]for a in articles
iflen(a["description"])>20# puede devolver vacío si ninguna cumple}# Ajusta el umbral si necesitas resultados visiblesby_title_min5 ={a["title"]: a["description"]for a in articles iflen(a["description"])>5}
El if en list y dict comprehensions va al final de la expresión.
Si el filtro es muy estricto, el resultado puede ser vacío; reduce el umbral y vuelve a ejecutar.
¿Cómo crear un conjunto de fuentes únicas con set comprehension?
Reto propuesto: construir un conjunto de fuentes sin duplicados. Empieza con el enfoque tradicional y luego refactoriza.
# Forma tradicionaldefunique_sources_traditional(articles): sources =set()for a in articles: sources.add(a["source"])# evita duplicados de manera naturalreturn sources
# Con set comprehensiondefunique_sources(articles):return{a["source"]for a in articles}
Un set elimina duplicados automáticamente.
La set comprehension condensa iteración y recolección en una sola línea.
¿Tienes tu solución al reto u otra variación con filtros en dict o list comprehensions? Compártela en los comentarios para impulsar la discusión y ayudar a otros estudiantes.