Listas comprehensions con Python

Creo que jugar un poco con las listas y Comprehension de Python puede resultarnos bastante útil para el alcance que tiene en la creación de listas de forma automática.

Listas comprehensions en Python

Primero vamos a crear dos listas de forma muy sencilla. Una contendrá valores numéricos y la otra cadenas de texto.

una_lista = [1, 2, 3, 4, 5]
otra_lista = ['hola', 'qué tal', 'cómo estás', 'adios']

La idea principal de list Comprehensions en Python es crear una lista nueva a partir de otra, pero con algunas modificaciones comunes para todos los elementos.

En el siguiente ejemplo haremos una modificación común a todos los elementos de nuestra lista numérica una_lista, multiplicaremos por 10 cada elemento de la lista y lo añadiremos a nueva_lista.

una_lista = [1, 2, 3, 4, 5]
nueva_lista = []
for numero in una_lista:
    nueva_lista.append(numero * 10)
print(nueva_lista)

# [10, 20, 30, 40, 50]

Para hacer algo parecido con una lista con strings en Python, quedaría de la siguiente forma:

Crearemos una lista nueva llamada nueva_lista_saludos con los valores de otra_lista pero agregando al final el nombre de Luis.

otra_lista = ['hola', 'qué tal', 'cómo estás', 'adios']
nueva_lista_saludos = []
for saludo in otra_lista:
    nueva_lista_saludos.append(f'{saludo} Luis')
print(nueva_lista_saludos)

# ['hola Luis', 'qué tal Luis', 'cómo estás Luis', 'adios Luis']

List comprehensions con Python

Ahora realizaremos los dos ejemplos anteriores haciendo uso de list Comprehensions para Python.

En el ejemplo para números en Python, habíamos creado una lista nueva con los mismos valores de la lista inicial pero multiplicados por diez.

una_lista = [1, 2, 3, 4, 5]
nueva_lista = [numero*10 for numero in una_lista]
print(nueva_lista)

# [10, 20, 30, 40, 50]

Para el ejemplo con strings habíamos agregado al final de cada elemento de la lista la palabra Luis.

otra_lista = ['hola', 'qué tal', 'cómo estás', 'adios']
nueva_lista = [saludo + ' Luis' for saludo in otra_lista]
print(nueva_lista)

# ['hola Luis', 'qué tal Luis', 'cómo estás Luis', 'adios Luis']

La principal ventaja o diferencia al trabajar con list Comprehensions es que en una sola línea de código creamos la nueva lista, recorremos la lista inicial y realizamos las operaciones.

Ahora en el siguiente ejemplo vamos a incluir un condicional dentro de las operaciones que realizaremos con los elementos de la primera lista para generar la nueva.

En una sola línea vamos a crear una lista nueva, recorreremos la antigua y verificaremos qué elemento es par para multiplicarlo por diez y agregarlo a la lista nueva.

Sí, es posible hacer esto en una sola línea de código mediante list Comprehensions de Python.

pares_por_diez = [numero * 10 for numero in una_lista if numero % 2 == 0]

Veamos el ejemplo completo:

una_lista = [1, 2, 3, 4, 5]
pares_por_diez = [numero * 10 for numero in una_lista if numero % 2 == 0]
print(pares_por_diez)

# [20, 40]

Aunque parezca mentira, no solo podemos recorrer una lista a la vez. Ahora vamos a recorrer las dos listas que creamos inicialmente y generaremos una nueva lista que contenga otras listas, una por cada posible valor que se pueda generar con el valor de la suma de las dos iniciales.

Suena un poco extraño y quizás no usemos este ejemplo en concreto jamás, pero es necesario ver el potencial casi infinito que tiene este tipo de creación de listas.

una_lista = [1, 2, 3, 4, 5]
otra_lista = ['hola', 'qué tal', 'cómo estás', 'adios']
nueva_lista = [[numero, saludo] for numero in una_lista for saludo in otra_lista]
print(nueva_lista)

# [[1, 'hola'], [1, 'qué tal'], [1, 'cómo estás'], [1, 'adios'], [2, 'hola'], [2, 'qué tal'], [2, 'cómo estás'], [2, 'adios'], [3, 'hola'], [3, 'qué tal'], [3, 'cómo estás'], [3, 'adios'], [4, 'hola'], [4, 'qué tal'], [4, 'cómo estás'], [4, 'adios'], [5, 'hola'], [5, 'qué tal'], [5, 'cómo estás'], [5, 'adios']]

Por último, vamos a crear una nueva lista con los valores strings de la lista inicial, pero transformando todas las cadenas a mayúsculas.

otra_lista = ['hola', 'qué tal', 'cómo estás', 'adios']
lista_nueva = [saludo.upper() for saludo in otra_lista]
print(lista_nueva)

# ['HOLA', 'QUÉ TAL', 'CÓMO ESTÁS', 'ADIOS']

En la documentación oficial de Python viene un ejemplo muy claro para combinar columnas mediante listas anidadas. Lo dejo por aquí para que lo tengamos a mano.

matrix = [
    [1, 2, 3, 4], 
    [5, 6, 7, 8], 
    [9, 10, 11, 12]
]
nueva_lista = [[row[i] for row in matrix] for i in range(4)]
print(nueva_lista)

# [
#     [1, 5, 9], 
#     [2, 6, 10], 
#     [3, 7, 11], 
#     [4, 8, 12]
# ]

Dejar un comentario

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