Comprensiones de Python
Las Comprensiones de Listas son un tipo especial de sintaxis que nos permite crear listas a partir de otras listas, y son increíblemente útiles cuando se trabaja con números y con uno o dos niveles de bucles for anidados.
Del tutorial de Python 3 aquí
Las comprensiones de listas proporcionan una forma concisa de crear listas. [...] o para crear una subsecuencia de aquellos elementos que satisfacen una cierta condición.
Lea Comprensiones de Python: Una introducción paso a paso para una introducción más profunda.
Comprensión de listas
Así es como creamos una nueva lista a partir de una colección existente con un Bucle For:
# Enfoque tradicional: crear lista usando un bucle for
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = []
for n in names:
new_list.append(n)
new_list
['Charles', 'Susan', 'Patrick', 'George']
Y así es como hacemos lo mismo con una Comprensión de Listas:
# Comprensión de listas: forma concisa de crear una nueva lista
# Sintaxis: [expresión for elemento in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']
new_list = [n for n in names] # Crear lista con todos los nombres
new_list
['Charles', 'Susan', 'Patrick', 'George']
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
[expresión for elemento in iterable](expresión for elemento in iterable){expresión for elemento in iterable}expresión for elemento in iterablePodemos hacer lo mismo con números:
# Comprensión de lista anidada: crear tuplas a partir de dos rangos
# Equivalente a bucles for anidados
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
n
[(1, 1), (1, 2), (2, 1), (2, 2)]
Añadir condicionales
Si queremos que new_list contenga solo los nombres que comienzan con C, con un bucle for, lo haríamos así:
# Enfoque tradicional: filtrar con condición if
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']
new_list = []
for n in names:
if n.startswith('C'): # Filtrar nombres que comienzan con 'C'
new_list.append(n)
print(new_list)
['Charles', 'Carol']
En una Comprensión de Listas, añadimos la sentencia if al final:
# Comprensión de listas con condición: filtrar elementos
# Sintaxis: [expresión for elemento in iterable if condición]
new_list = [n for n in names if n.startswith('C')]
print(new_list)
['Charles', 'Carol']
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
if en una comprensión de listas?forforPara usar una sentencia if-else en una Comprensión de Listas:
# Comprensión de listas con if-else: expresión condicional
# Sintaxis: [expresión_si_verdadero if condición else expresión_si_falso for elemento in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums] # Duplicar números pares
print(new_list)
[1, 4, 3, 8, 5, 12]
Comprensiones de conjuntos y diccionarios
Los conceptos básicos de las comprensiones de `list` también se aplican a los conjuntos y diccionarios.
Comprensión de conjuntos
# Comprensión de conjuntos: crear un conjunto usando sintaxis de comprensión
# Sintaxis: {expresión for elemento in iterable}
b = {"abc", "def"}
{s.upper() for s in b} # Convertir todas las cadenas a mayúsculas
{"ABC", "DEF"}
Comprensión de diccionarios
# Comprensión de diccionarios: intercambiar claves y valores
# Sintaxis: {expresión_clave: expresión_valor for elemento in iterable}
c = {'name': 'Pooka', 'age': 5}
{v: k for k, v in c.items()} # Invertir pares clave-valor
{'Pooka': 'name', 5: 'age'}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
[clave: valor for elemento in iterable](clave: valor for elemento in iterable){expresión_clave: expresión_valor for elemento in iterable}{clave, valor for elemento in iterable}Se puede generar una comprensión de listas a partir de un diccionario:
# Comprensión de listas a partir de un diccionario: crear cadenas formateadas
c = {'name': 'Pooka', 'age': 5}
["{}:{}".format(k.upper(), v) for k, v in c.items()] # Formatear como "CLAVE:valor"
['NAME:Pooka', 'AGE:5']