Python Reto #5 — Filtrar números pares de una lista

Nivel: Principiante
Tema: Listas, condicionales, bucles, comprensión de listas, validación de entradas, tests con pytest
Objetivo: Crear una función que devuelva únicamente los números pares de una lista, manteniendo el orden original y manejando entradas inválidas de forma segura.

Enunciado

Crea una función llamada filtrar_pares(lista) que:

  1. Reciba un valor lista.
  2. Si lista es None, devuelva una lista vacía [].
  3. Si lista no es una lista (list), lance TypeError.
  4. Devuelva una nueva lista que contenga solo los números pares.
  5. Mantenga el orden original de los elementos.
  6. Ignore valores que no sean enteros (int).

Ejemplos

  • filtrar_pares([1, 2, 3, 4, 5, 6])[2, 4, 6]
  • filtrar_pares([10, 15, 20, 25])[10, 20]
  • filtrar_pares([1, "2", 4, None])[4]
  • filtrar_pares([])[]
  • filtrar_pares(None)[]
  • filtrar_pares("123")TypeError

Pistas

  1. Un número es par si numero % 2 == 0.
  2. Antes de aplicar el módulo, asegúrate de que el valor sea un int.
  3. Puedes resolverlo con un bucle for o con una comprensión de listas.

Solución explicada (paso a paso)

  1. Si la lista es None, no hay nada que filtrar → devolvemos [].
  2. Si la entrada no es una lista, lanzamos TypeError.
  3. Creamos una lista vacía para los resultados.
  4. Recorremos cada elemento:
    • si es un entero (int) y es par, lo añadimos a la lista resultado,
    • si no, lo ignoramos.
  5. Devolvemos la lista filtrada manteniendo el orden original.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Usar comprensión de listas: versión más concisa
  2. Soportar tuple: aceptar listas y tuplas
  3. Parámetro opcional: filtrar pares o impares según un flag
  4. Validar negativos y cero: confirmar comportamiento esperado

Lo que aprendiste

  • Cómo filtrar listas con condiciones
  • Cómo validar tipos antes de operar
  • Cómo mantener el orden original
  • Cómo escribir funciones predecibles y testeables

Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.

Cuando termines este reto, estás listo para pasar a Intermedio o continuar con Reto #6 — Palíndromo (ignorando espacios y mayúsculas) para profundizar en strings y normalización.