10.2. Listas de comprensión

La listas de comprensión, del inglés list comprehensions, es una funcionalidad que le permite crear listas avanzadas en una misma línea de código.

La forma general de la definición de una lista por comprensión es:

[expresion for item in iterable]

Opcionalmente, se puede incluir un condicional en la expresión:

[expresion for item in iterable if condicion]

expresion puede ser cualquier expresión computable en Python, generalmente involucrando un item del iterable llamado iterable puede ser cualquier objeto iterable, como una secuencia (lista o cadena de caracteres), la función la función range(), etc.

La salida siempre es un tipo de lista Python.

10.2.1. Ejemplo 1

Si requiere crear una lista de 4 elementos y cada elemento calcularle la potencia de 2, usando el método tradicional, eso seria así:

>>> lista = []
>>> for i in range(4):
...     lista.append(i**2)
...
>>> print lista
[0, 1, 4, 9]

Entonces el ejemplo anterior usando listas de comprensión, eso seria así:

>>> [i**2 for i in range(4)]
[0, 1, 4, 9]

10.2.2. Ejemplo 2

A continuación se crear una lista con las letras de una palabra, usando el método tradicional, eso seria así:

>>> lista = []
>>> for letra in 'casa':
...     lista.append(letra)
...
>>> print lista
['c', 'a', 's', 'a']

Entonces el ejemplo anterior usando listas de comprensión, eso seria así:

>>> lista = [letra for letra in 'casa']
>>> print lista
['c', 'a', 's', 'a']

Como puede detallar en el ejemplo anterior, gracias a la listas de comprensión usted puede indicar directamente cada elemento que va a formar la lista, en este caso cada letra, a la vez que definimos el bucle for, entonces la lista está formada por cada letra que recorremos en el bucle for.

10.2.3. Ejemplo 3

A continuación se crear una lista con las potencias de 2 de los primeros 10 números, usando el método tradicional, eso seria así:

>>> lista = []
>>> for numero in range(0,11):
...     lista.append(numero**2)
...
>>> print lista
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Entonces el ejemplo anterior usando listas de comprensión, eso seria así:

>>> lista = [numero**2 for numero in range(0,11)]
>>> print lista
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

De este código anterior usted puede aprender que es posible modificar al vuelo los elementos los cuales van a formar la lista.

10.2.4. Ejemplo 4

A continuación se crear una lista con los todos los múltiples de 2 entre 0 y 10, usando el método tradicional, eso seria así:

>>> lista = []
>>> for numero in range(0,11):
...     lista.append(numero**2)
...
>>> print lista
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

También, si añade al código anterior, los números del 0 al 10 cuando su módulo de 2 sea 0 usando el método tradicional, eso seria así:

>>> lista = []
>>> for numero in range(0,11):
...     if numero % 2 == 0:
...         lista.append(numero)
...
>>> print lista
[0, 2, 4, 6, 8, 10]

Entonces el ejemplo anterior donde crear una lista con los todos los múltiples de 2 entre 0 y 10, usando listas de comprensión, eso seria así:

>>> lista = [numero for numero in range(0,11) if numero % 2 == 0 ]
>>> print lista
[0, 2, 4, 6, 8, 10]

Para el ejemplo anterior donde crear una lista con los todos los múltiples de 2 entre 0 y 10 cuando su módulo de 2 sea 0, usando listas de comprensión, eso seria así:

>>> [numero for numero in range(0,11) if numero % 2 == 0 ]
[0, 2, 4, 6, 8, 10]

En este caso puede observar que incluso puede marcar una condición justo al final para añadir o no el elemento en la lista.

10.2.5. Ejemplo 5

A continuación se crear una lista de pares a partir de otra lista creada con las potencias de 2 de los primeros 10 números, usando el método tradicional, eso seria así:

>>> lista = []
>>> for numero in range(0,11):
...     lista.append(numero**2)
...
>>> pares = []
>>> for numero in lista:
...     if numero % 2 == 0:
...         pares.append(numero)
...
>>> print pares
[0, 4, 16, 36, 64, 100]

Entonces el ejemplo anterior usando listas de comprensión, eso seria así:

>>> lista = [numero for numero in
...             [numero**2 for numero in range(0,11)]
...                 if numero % 2 == 0]
>>> print lista
[0, 4, 16, 36, 64, 100]

Crear listas a partir de listas anidadas le permite llevar la listas de comprensión al siguiente nivel y además no hay un límite.

10.2.6. Usando Listas de comprensión con Archivos

Por hacer

TODO escribir esta sección.


Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.