PyQuiz 23 – List comprehension en Python
El reto
nums = [x**2 for x in range(5)]
print(nums)
¿Cuál es el resultado?
- a) [0, 1, 4, 9, 16]
- b) [1, 4, 9, 16, 25]
- c) [0, 1, 4, 9]
Piensa tu respuesta antes de seguir leyendo…
Concepto: List comprehension
Las list comprehensions (comprensiones de lista) son una sintaxis compacta para crear listas a partir de un iterable, aplicando opcionalmente una transformación y/o un filtro. La estructura básica es: [expresión for variable in iterable].
Son equivalentes a un bucle for que construye una lista con append(), pero en una sola línea y de forma más eficiente. Python evalúa la expresión para cada valor del iterable y añade el resultado a la nueva lista.
En [x**2 for x in range(5)], range(5) genera los valores 0, 1, 2, 3, 4. Para cada uno se calcula x**2 (el cuadrado). El resultado es una lista con los cuadrados: [0, 1, 4, 9, 16].
Paso a paso
range(5)— genera los valores 0, 1, 2, 3, 4 (cinco valores, empezando en 0).- Para
x = 0:0**2 = 0. Parax = 1:1**2 = 1. Parax = 2:2**2 = 4. - Para
x = 3:3**2 = 9. Parax = 4:4**2 = 16. nums = [x**2 for x in range(5)]— la lista resultante es[0, 1, 4, 9, 16].print(nums)— se imprime[0, 1, 4, 9, 16].
Solución
Respuesta correcta: A) [0, 1, 4, 9, 16]
range(5) = 0,1,2,3,4. Elevados al cuadrado: [0, 1, 4, 9, 16].
Sabías que…
Las list comprehensions admiten un filtro opcional con if, y también se pueden anidar para iterar sobre múltiples dimensiones:
# Con filtro: solo cuadrados de números pares
nums = [x**2 for x in range(10) if x % 2 == 0]
print(nums) # [0, 4, 16, 36, 64]
# Transformación de cadenas
palabras = ['python', 'es', 'genial']
mayus = [p.upper() for p in palabras]
print(mayus) # ['PYTHON', 'ES', 'GENIAL']
# Anidada: tabla de multiplicar 2x2
tabla = [(i, j) for i in range(1, 4) for j in range(1, 4)]
print(tabla[:3]) # [(1, 1), (1, 2), (1, 3)]
# dict comprehension
cuadrados = {x: x**2 for x in range(5)}
print(cuadrados) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Prueba tú mismo
Escribe una list comprehension que devuelva los cubos (x**3) de los números impares del 1 al 10.
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Listas en Python
