Última actualización: 04 de diciembre de 2023

10.1. 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.1.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.1.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.1.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.1.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.1.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.1.6. Usando Listas de comprensión con Archivos

Aquí hay un posible programa que usa listas de comprensión para manipular archivos en Python 3:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
"""Programa para leer y escribir un archivo de texto con listas de compresión"""

import os

NOMBRE_ARCHIVO = "listas_comprension_archivo.txt"
DIR_ARCHIVO = os.path.dirname(os.path.abspath(__file__)) + os.sep
ARCHIVO = DIR_ARCHIVO + NOMBRE_ARCHIVO


with open(ARCHIVO, "r") as f:
    # Lee todas las líneas del archivo y las almacena en una lista
    lineas = f.readlines()

# Crea una nueva lista con las líneas modificadas con la las letras a mayúsculas
nuevas_lineas = [linea.upper() for linea in lineas]

with open(ARCHIVO, "w") as f:
    # Escribe las nuevas líneas en el archivo, separadas por saltos de línea
    f.write("\n".join(nuevas_lineas))

f.close()

Archivo de texto a leer y manipular:

1
2
3
4
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Este programa usa listas de comprensión para transformar cada línea del archivo de texto según una expresión. Puedes cambiar la expresión según lo que quieras hacer con el archivo. Por ejemplo, puedes filtrar las líneas que contienen una palabra específica, o añadir algún prefijo o sufijo a cada línea.

Asi queda el archivo manipulado:

LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT, SED DO EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA.

UT ENIM AD MINIM VENIAM, QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.

DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE CILLUM DOLORE EU FUGIAT NULLA PARIATUR.

EXCEPTEUR SINT OCCAECAT CUPIDATAT NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM.

Importante

Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces: listas_comprension_archivo.py y listas_comprension_archivo.txt.

Truco

Para ejecutar el código listas_comprension_archivo.py y listas_comprension_archivo.txt, abra una consola de comando, acceda al directorio donde se encuentra ambos programas:

leccion10/
├── listas_comprension_archivo.py
└── listas_comprension_archivo.txt

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

$ python listas_comprension_archivo.py

Ver también

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


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. GMT-4 - Caracas, Venezuela.

La hora aquí es actualmente 7:35 PM GMT-4.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional