Resumen

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.

def extract_titles_traditional(articles):
    """Extrae solo los títulos usando un for."""
    titles = []
    for article in articles:
        titles.append(article["title"])  # iteración + acumulación
    return titles

Ahora, la misma lógica con list comprehension y retorno en una línea.

def extract_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.

def extract_titles_long(articles):
    return [a["title"] for a in articles if len(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ón
long_desc_by_title = {
    a["title"]: a["description"]
    for a in articles
    if len(a["description"]) > 20  # puede devolver vacío si ninguna cumple
}

# Ajusta el umbral si necesitas resultados visibles
by_title_min5 = {a["title"]: a["description"] for a in articles if len(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 tradicional
def unique_sources_traditional(articles):
    sources = set()
    for a in articles:
        sources.add(a["source"])  # evita duplicados de manera natural
    return sources

# Con set comprehension
def unique_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.