Las comprensiones de listas ofrecen una manera concisa de crear listas. Sus usos comunes son para hacer nuevas listas donde cada elemento es el resultado de algunas operaciones aplicadas a cada miembro de otra secuencia o iterable, o para crear un segmento de la secuencia de esos elementos para satisfacer una condición determinada 1.

Su sintaxis es la siguiente:

# Sin condiciones
nombre = [expresion for miembro in iterable]

# Con una sola condición if
nombre = [expresion for miembro in iterable if condicion]

# Con una condición if-else
nombre = [expresion if condicion else otra_expresion for miembro in iterable]

Toda comprensión de lista incluye tres elementos:

  • expresion: es un objeto, miembro, llamada a un método (función) o cualquier expresión válida que retorne un valor.
  • miembro: es el objeto, elemento o valor en la lista o iterable.
  • iterable: es una lista, set, secuencia, generador o cualquier objeto que pueda retornar sus elementos de uno en uno.

Se puede apreciar las diversas formas de crear listas en Python:

>>> cuadrados = []
>>> for x in range(10):
...     cuadrados.append(x**2)
>>> cuadrados
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> cuadrados = list(map(lambda x: x**2, range(10)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> cuadrados = [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Beneficios de usar comprensiones de listas

A menudo las comprensiones de listas se consideran más Pythonico que usar bucles o map().

Las comprensiones de listas son mas declarativas que los bucles, siendo más fáciles de leer y entender. Los bucles requieren atención en cómo la lista es creada. Se tiene que crear manualmente una lista vacía, iterar sobre sus elementos y añadir cada uno de ellos al final de la lista.

Con las comprensiones de listas en Python, se puede poner más atención en que es lo que se quiere en la listas y confiar en que Python se encargará del cómo la lista se creará.

En progreso…


Actualizado: