📋 Listas por comprensión en Python | Guía + Ejemplos (2026)

Anteriormente habíamos visto los métodos que nos permitían trabajar con listas y tuplas. En esta entrada vamos a aprender listas por comprensión y diccionarios por comprensión en Python utilizando el bucle for y diversos métodos.

📓 Abre tu cuaderno de Jupyter Notebook que creaste en la lección anterior (9-Archivos en Python) y vamos a crear un nuevo cuaderno para esta lección. Llámalo 10-Listas por comprensión.

📚 Recursos externos para profundizar: Consulta la documentación oficial sobre listas por comprensión y la guía sobre diccionarios en Python.

✅ Listas por comprensión

Las listas, tuplas y diccionarios son como dijimos antes conjuntos y estos surgen de la agrupación, ya sea por extensión o por comprensión.

Listas por comprensión - Diccionarios por comprensión

Cuando agrupamos elementos por extensión, cada elemento se enumera de manera explícita, es decir, se define uno por uno cada elemento que pertenece al grupo. Es decir, creamos una lista especificando en el código cada elemento.

En cambio, cuando agrupamos elementos por comprensión lo hacemos sin definir uno por uno los elementos sino que los agrupamos por una propiedad en común.

Podemos crear una lista por extensión o por comprensión:

# Por extensión:
a = [0, 2, 4, 6, 8]
print(a)

# Por comprensión
a = [x for x in range(9) if x % 2 == 0]
# <Expresión> for <Elemento> in <Iterable> if <Condición>
print(a)
Resultado:
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]

Como ves el resultado será el mismo. La diferencia es que la lista por comprensión fue creada a partir de la propiedad en común (ser pares) de los números en rango de 0 a 9, iterándolos para descartar aquellos que no cumplen la condición de ser divisibles por 2 con resto cero.

Si separamos el código y lo miramos atentamente, vemos que almacena en la lista «a»: primeramente se almacena en la variable «x» un rango de números del 0 al 9 y se itera cada uno. Luego, presentando una condición if, se expone que solo se almacenarán aquellos cuya división por dos dé resto 0.

Aprender a crear listas por comprensión nos va a permitir modificar una lista iterando sobre ella y aplicando ciertos filtros o condiciones, lo que nos presentará una elegante ventaja.

🖋️ Sintaxis de listas por comprensión

Listas por comprensión - diccionarios por comprensión emoji

La sintaxis para crear listas por comprensión consta de colocar entre corchetes una expresión seguida de la cláusula for para iterar y luego puede ir una condición para filtrar los resultados finales. Las listas por comprensión no modifican una lista existente sino que crean una nueva, en algunos casos temporal.

Venga, creemos algunas listas por comprensión a modo de ejemplo mientras exploramos su sintaxis:

# Listas por comprensión: crear lista con bucle for
ListaCuadrados = [x**2 for x in range(10)]
# <Expresión> for <Elemento> in <Iterable>
print(ListaCuadrados)
Resultado:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Esto podría interpretarse como que estamos creando una lista llamada ListaCuadrados que contiene la expresión «x elevado al cuadrado» para el elemento x de un rango de 0 a 10. Al realizar un bucle for se aplica el cuadrado para cada elemento generado por range().

Normalmente se coloca a la izquierda la expresión (transformación) a realizar y a la derecha la condición.

📝 Crear listas a partir de otra lista

Podemos iterar una lista (así como cualquier iterable) creada anteriormente para extraer una nueva aplicando diversos filtros para lograr un objetivo específico. Supongamos que tenemos una lista de nombres y queremos extraer aquellos cuyas iniciales sean vocales. Las listas creadas a partir de otra lista filtrada por un bucle serán listas por comprensión.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Listas por comprensión - extraer nombres con inicial vocálica
#  Copyright https://pythones.net

vocales = ['A', 'E', 'I', 'O', 'U']
Nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
           'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
           'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela']

Nombresvocales = [nombre for nombre in Nombres if nombre[0] in vocales]
print(Nombresvocales)
Resultado:
['Alberto', 'Exequiel', 'Alejandro', 'Antonio', 'Omar', 'Antonia', 'Amalia', 'Anabela']

Para comprobar todas las vocales me fue necesario crear una lista aparte con las mismas. Entonces se podría interpretar el código de la lista Nombresvocales como: nombre para nombre en la lista «Nombres» si el índice «0» de la iteración de cada «nombre» (elemento de la lista) se encuentran (in) en la lista vocales.

El bucle for recorre cada letra de cada elemento de la lista comparándolo con cada elemento de la lista vocales.

Puede parecer difícil de realizar al principio, pero una vez que aprendemos cómo funciona el bucle for es cuestión de ir probando. A veces no sale a la primera.

La mejor forma de aprender a iterar listas, cadenas o diccionarios es realizando ejercicios que me gustaría plantear en las siguientes entradas.

El código anterior es igual al siguiente:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Listas por comprensión - versión con bucle for explícito
#  Copyright https://pythones.net

Nombresvocales = []
vocales = ['A', 'E', 'I', 'O', 'U']
Nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
           'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
           'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela']

for nombre in Nombres:  # Para el elemento nombre, iteramos la lista Nombres
    if nombre[0] in vocales:  # Si el índice 0 del elemento nombre está en la lista vocales
        Nombresvocales.append(nombre)  # Agregamos el nombre a la lista Nombresvocales

print(Nombresvocales)
Resultado:
['Alberto', 'Exequiel', 'Alejandro', 'Antonio', 'Omar', 'Antonia', 'Amalia', 'Anabela']

En este otro código hacemos realmente lo mismo, pero debemos primero crear la lista vacía donde irán los elementos que cumplan la condición: Nombresvocales y luego los añadimos a ella.

Esta segunda forma de hacerlo te permitirá comprender un poco mejor lo que hicimos en la primera. Al no estar todo en una sola línea resulta más comprensible, pero si te fijas bien es básicamente lo mismo. Puedes intentar hacerlo de la segunda manera y luego tratar de traducir el código a la primera, lo que te permitirá aprender a simplificar el código y pensarlo desde el punto correcto.

🐍 Ejemplo de listas por comprensión

Vamos a tratar de separar nuestra lista de nombres en dos listas: una para los masculinos y otra para los femeninos, suponiendo que los nombres femeninos terminan en «a» y «e» en nuestro caso.

Para eso podemos utilizar casi el mismo código que usamos anteriormente pero cambiando el índice que comprobamos de [0] a [-1] para comprobar siempre la última letra de cada nombre.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Listas por comprensión - separar nombres por género
#  Copyright https://pythones.net

Nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
           'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
           'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela']

# Versión con bucle for explícito (más comprensible)
Listafemeninos = []
Listamasculinos = []

for nombre in Nombres:
    if nombre[-1] == 'a' or nombre[-1] == 'e':
        Listafemeninos.append(nombre)
    else:
        Listamasculinos.append(nombre)

print("Femeninos:", Listafemeninos)
print("Masculinos:", Listamasculinos)
Resultado:
Femeninos: ['Tamara', 'Antonia', 'Amalia', 'Daniela', 'Sofia', 'Celeste', 'Jorgelina', 'Anabela']
Masculinos: ['Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel', 'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Ramon']

Ahora hagámoslo como explicamos anteriormente, creando directamente las listas mediante comprensión:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Listas por comprensión - versión simplificada
#  Copyright https://pythones.net

Nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
           'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
           'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela']

Listafemeninos = [nombre for nombre in Nombres if nombre[-1] == 'a' or nombre[-1] == 'e']
Listamasculinos = [nombre for nombre in Nombres if nombre[-1] != 'a' and nombre[-1] != 'e']

print("Femeninos:", Listafemeninos)
print("Masculinos:", Listamasculinos)
Resultado:
Femeninos: ['Tamara', 'Antonia', 'Amalia', 'Daniela', 'Sofia', 'Celeste', 'Jorgelina', 'Anabela']
Masculinos: ['Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel', 'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Ramon']

Como ves funciona perfectamente y lo único que hicimos fue meter el mismo código dentro de la lista. También en la primera lista podríamos haber colocado un else y un append para añadir directamente aquellos que no cumplan la condición a la lista de masculinos, pero preferí hacer otro bucle for para ejemplificar.

En un ejemplo real, suponiendo que tuviéramos 2000 nombres en una lista y alguno se escapa a la condición de terminar en ‘a’ o ‘e’, podríamos mediante un else separarlos en una lista indefinida, para luego revisar y modificar nuestras condiciones.

➡️ Condicionales de comprobación (All / Any)

Hay algo más que aún no hemos visto que podríamos utilizar perfectamente para comprobar datos de listas, cadenas y diccionarios. all() y any() nos van a permitir determinar si todos (all) o algunos / ninguno (any) elementos de una lista devuelven True ante tal condición.

Sintaxis

# all: Si todos devuelven True, devuelve True. Caso contrario, False
if all(condición for elemento in iterable):
    # Hacer algo

# any: Devuelve True si alguno es True. Devuelve False si está vacío o todos son False
if any(condición for elemento in iterable):
    # Hacer algo

🐍 Ejemplo

Supongamos un ejemplo en el que le pedimos a un usuario que ingrese elementos para añadir a una lista y luego debemos comprobar si dichos elementos cumplen la condición. En este caso le solicitamos al usuario ingrese tres números mayores a 5 y menores a 10.

  • Nosotros queremos que el usuario ingrese 3 números para almacenarlos en una lista.
  • Si todos los números son mayores o igual a 5 y menores o igual a 10, que nos dé un OK.
  • En caso que algún número no sea mayor o igual a 5 y no sea menor o igual a 10, que nos dispare un aviso y volvamos a intentar.
  • Si ningún número cumple ninguna de las condiciones anteriores, terminar el programa.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Listas por comprensión - ejemplo con all() y any()
#  Copyright https://pythones.net

Numeros = []

while True:
    try:
        Numerito1 = int(input("Ingresa un numero mayor de 5 y menor de 10: "))
        Numeros.append(Numerito1)
        Numerito2 = int(input("Ingresa un numero mayor de 5 y menor de 10: "))
        Numeros.append(Numerito2)
        Numerito3 = int(input("Ingresa un numero mayor de 5 y menor de 10: "))
        Numeros.append(Numerito3)

        print("Lista ingresada:", Numeros)

        # Comprueba si todos los números cumplen la condición
        if all(numero >= 5 and numero <= 10 for numero in Numeros):
            print("Correcto! Todos los números son mayores a 5 y menores a 10")
            print("Gracias y hasta luego")
            break

        # Comprueba si algún número NO cumple la condición
        elif any(numero < 5 or numero > 10 for numero in Numeros):
            print("Algún numero no es correcto")
            Numeros = []  # Reseteamos la lista
            print("Vuelve a intentarlo")

        else:
            print("Error: no has ingresado ningún número válido")
            print("Suerte la próxima perdedor, ni siquiera un solo numero!")
            break

    except ValueError:
        print("Error: debes ingresar un número entero.")
        Numeros = []

Nuestro programa funciona como la seda, pero hay que destacar que la condición que comprueba si son mayores o iguales a 5 y menores o iguales a 10 debimos colocarla a la izquierda del bucle for para que sea posible la correcta comprobación de All / Any.

all() y any() nos serán muy útiles cuando todos los elementos de la lista o iterable deben cumplir una condición en común.


📙 Diccionarios por comprensión usando dict()

Diccionarios por comprensión

Ahora vamos a trabajar con diccionarios. Uff, te debo tener la cabeza más cansada que un bucle infinito, jaja, pero venga que está que arde.

  • Vamos a crear un diccionario por comprensión utilizando dict y bucle for.
  • Vamos a aprender a convertir listas en un diccionario.
  • Agregaremos elementos al diccionario con input.

Anteriormente en bucles for habíamos visto cómo iterar un diccionario existente, pero si deseamos crear un diccionario por comprensión, el código sería el siguiente:

# Creando un diccionario usando dict con comprensión
print(dict((x, x * x) for x in (1, 2, 3, 4)))

# Almacenarlo y imprimirlo
ss = dict((x, x * x) for x in (1, 2, 3, 4))
print(ss)

# Sintaxis:
# dict(<clave>, <valor> for <elemento> in <iterable>)
Resultado:
{1: 1, 2: 4, 3: 9, 4: 16}
{1: 1, 2: 4, 3: 9, 4: 16}

En este caso estamos creando un diccionario usando dict() seguido de un bucle for que especifica en este caso «x» como (key) y «x * x» como (value) para cada elemento («x») en «1, 2, 3, 4». Entonces vemos como key sucesivas 1, 2, 3, 4 y como valores su cuadrado respectivo: 1, 4, 9, 16.

📙 Diccionarios por comprensión a partir de Listas con bucle for

Vamos a ver cómo crear un diccionario a partir de una lista, pero presta especial atención a esta lista:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Diccionarios por comprensión a partir de lista
#  Copyright https://pythones.net

Lista = [('hola', 'python')]  # Lista con tuplas

diccionario = {k: v for k, v in Lista}  # Creando diccionario a partir de lista
print(diccionario)
Resultado:
{'hola': 'python'}

Como vemos hemos creado un nuevo diccionario a partir de una lista utilizando un bucle for. Pero hay un detalle importante en cuanto a la lista: esta no puede ser una lista común. Debe estar organizada de manera que facilite la creación de un diccionario (cada elemento de la lista es una tupla separada por coma) como ves en el código más arriba, encerrados los dos elementos por paréntesis; uno tomará el lugar de clave y el siguiente el de valor.

📦 Función zip() – Fusionamos listas y las convertimos en diccionarios

Para convertir una lista común a una lista de esta manera podemos utilizar la función zip() que admite como parámetro un conjunto de listas. Veámoslo en un ejemplo fusionando dos listas para crear un diccionario:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Creando un diccionario a partir de listas usando zip()
#  Copyright https://pythones.net

L1 = ['Maria', 'Juan', 'Pedro']  # Lista con los nombres
LEdades = [14, 16, 18]  # Lista con las edades

diccionario = dict(zip(L1, LEdades))  # Creamos un diccionario fusionando con zip()
print(diccionario)
Resultado:
{'Juan': 16, 'Maria': 14, 'Pedro': 18}

Como vemos se ha creado un diccionario con las listas anteriores, correspondiendo en el orden de clave y valor. Teniendo en cuenta que ambas listas tienen la misma cantidad de elementos; de lo contrario, el elemento que quede fuera por impar no aparecerá en el diccionario.

➡️ Iterando diccionarios: claves o valores, y ambas con bucle for

Podemos iterar un diccionario para obtener solo las claves, los valores o ambos a la vez. Primeramente aclararte que puedes utilizar el método keys(), values() como hemos visto en métodos de los diccionarios, que nos facilitarán la iteración de un único elemento clave o valor. Para ambos podemos utilizar el método items().

🔑 Iterando las claves de un diccionario

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Iterando claves de un diccionario
#  Copyright https://pythones.net

semaforo = {'Rojo': 'Detenerse', 'Amarillo': 'Despacio', 'Verde': 'Avanzar'}
colores = semaforo.keys()  # Creamos la variable colores que almacena las keys()

for color in colores:
    print(color)
Resultado:
Rojo
Amarillo
Verde

Si almacenamos en una variable las claves mediante el método keys() obtenemos una vista del diccionario que nos permite trabajar solo con las claves y nos presenta la ventaja de que al cambiar un elemento del diccionario automáticamente se actualizará.

🗒️ Iterando los valores de un diccionario

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Iterando valores de un diccionario
#  Copyright https://pythones.net

semaforo = {'Rojo': 'Detenerse', 'Amarillo': 'Despacio', 'Verde': 'Avanzar'}
acciones = semaforo.values()  # Creamos la variable acciones que almacena los values()

for accion in acciones:
    print(accion)
Resultado:
Avanzar
Despacio
Detenerse

Si almacenamos en una variable los valores mediante el método values() obtenemos una vista del diccionario que nos permite trabajar solo con los valores y nos presenta la ventaja de que al cambiar un elemento del diccionario automáticamente se actualizará.

🔐 Iterando ambos, claves y valores de un diccionario

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  Iterando claves y valores de un diccionario
#  Copyright https://pythones.net

semaforo = {'Rojo': 'Detenerse', 'Amarillo': 'Despacio', 'Verde': 'Avanzar'}
elementos = semaforo.items()  # Creamos la variable elementos que almacena key y values

for k, v in elementos:  # Iteramos
    print(k, 'significa', v)
Resultado:
Amarillo significa Despacio
Rojo significa Detenerse
Verde significa Avanzar

Aquí estamos iterando el diccionario completo utilizando items(). En caso contrario, obtendremos un error si intentamos iterar directamente sobre el diccionario.

Esto ha sido todo. Espero hayas aprendido a crear listas y diccionarios por comprensión, así como a trabajar mejor con ambos. ¡Nos vemos en la siguiente entrada!

📅 Última actualización: julio 28, 2026

¡Compartir es una forma de agradecer! :)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio