Comprensiones en Python

Las comprensiones en Python nos brindan una forma breve y concisa de construir nuevas secuencias (como listas, conjuntos, diccionarios, etc.) utilizando secuencias que ya se han definido. Python admite los siguientes 4 tipos de comprensiones:

  • Lista de comprensiones
  • Comprensiones de diccionario
  • Establecer comprensiones
  • Comprensiones del generador

Comprensiones de lista:

Las Comprensiones de listas proporcionan una forma elegante de crear nuevas listas. La siguiente es la estructura básica de una lista por comprensión:

lista_salida = [ exp_salida para var en lista_entrada si ( var cumple esta condición)]

Tenga en cuenta que la lista de comprensión puede contener o no una condición if. Las comprensiones de lista pueden contener múltiples for (comprensiones de lista anidadas).

Ejemplo #1: supongamos que queremos crear una lista de salida que contenga solo los números pares que están presentes en la lista de entrada. Veamos cómo hacer esto usando bucles for y comprensión de listas y decidamos qué método se adapta mejor.

# Constructing output list WITHOUT
# Using List comprehensions
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
  
output_list = []
  
# Using loop for constructing output list
for var in input_list:
    if var % 2 == 0:
        output_list.append(var)
  
print("Output List using for loop:", output_list)

Producción:

Output List using for loop: [2, 4, 4, 6]
# Using List comprehensions
# for constructing output list
  
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
  
  
list_using_comp = [var for var in input_list if var % 2 == 0]
  
print("Output List using list comprehensions:",
                               list_using_comp)

Producción:

Output List using list comprehensions: [2, 4, 4, 6]

Ejemplo #2: Supongamos que queremos crear una lista de salida que contenga cuadrados de todos los números del 1 al 9. Veamos cómo hacer esto usando bucles for y comprensión de listas.

# Constructing output list using for loop
output_list = []
for var in range(1, 10):
    output_list.append(var ** 2)
      
print("Output List using for loop:", output_list)

Producción:

Output List using for loop: [1, 4, 9, 16, 25, 36, 49, 64, 81]
# Constructing output list
# using list comprehension
list_using_comp = [var**2 for var in range(1, 10)]
  
print("Output List using list comprehension:", 
                              list_using_comp)

Producción:

Output List using list comprehension: [1, 4, 9, 16, 25, 36, 49, 64, 81]

Comprensiones del diccionario:

Ampliando la idea de listas de comprensión, también podemos crear un diccionario utilizando las comprensiones de diccionario. La estructura básica de la comprensión de un diccionario se muestra a continuación.

output_dict = {clave: valor para (clave, valor) en iterable si (clave, valor satisface esta condición)}

Ejemplo #1: supongamos que queremos crear un diccionario de salida que contenga solo los números impares que están presentes en la lista de entrada como claves y sus cubos como valores. Veamos cómo hacer esto usando bucles for y comprensión de diccionario.

input_list = [1, 2, 3, 4, 5, 6, 7]
  
output_dict = {}
  
# Using loop for constructing output dictionary
for var in input_list:
    if var % 2 != 0:
        output_dict[var] = var**3
  
print("Output Dictionary using for loop:",
                             output_dict )

Producción:

Output Dictionary using for loop: {1: 1, 3: 27, 5: 125, 7: 343}
# Using Dictionary comprehensions
# for constructing output dictionary
  
input_list = [1,2,3,4,5,6,7]
  
dict_using_comp = {var:var ** 3 for var in input_list if var % 2 != 0}
  
print("Output Dictionary using dictionary comprehensions:",
                                           dict_using_comp)

Producción:

Output Dictionary using dictionary comprehensions: {1: 1, 3: 27, 5: 125, 7: 343}

Ejemplo #2: Dadas dos listas que contienen los nombres de los estados y sus capitales correspondientes, construya un diccionario que mapee los estados con sus respectivas capitales. Veamos cómo hacer esto usando bucles for y comprensión de diccionario.

state = ['Gujarat', 'Maharashtra', 'Rajasthan']
capital = ['Gandhinagar', 'Mumbai', 'Jaipur']
  
output_dict = {}
  
# Using loop for constructing output dictionary
for (key, value) in zip(state, capital):
    output_dict[key] = value
  
print("Output Dictionary using for loop:",
                              output_dict)

Producción:

Output Dictionary using for loop: {'Gujarat': 'Gandhinagar',
                                   'Maharashtra': 'Mumbai', 
                                   'Rajasthan': 'Jaipur'}
# Using Dictionary comprehensions
# for constructing output dictionary
  
state = ['Gujarat', 'Maharashtra', 'Rajasthan']
capital = ['Gandhinagar', 'Mumbai', 'Jaipur']
  
dict_using_comp = {key:value for (key, value) in zip(state, capital)}
  
print("Output Dictionary using dictionary comprehensions:", 
                                           dict_using_comp)

Producción:

Output Dictionary using dictionary comprehensions: {'Rajasthan': 'Jaipur',
                                                    'Maharashtra': 'Mumbai',
                                                    'Gujarat': 'Gandhinagar'}

Establecer comprensiones:

Las comprensiones de conjuntos son bastante similares a las comprensiones de listas. La única diferencia entre ellos es que las comprensiones de conjuntos usan corchetes { }. Veamos el siguiente ejemplo para comprender las comprensiones de conjuntos.

Ejemplo #1: supongamos que queremos crear un conjunto de salida que contenga solo los números pares que están presentes en la lista de entrada. Tenga en cuenta que set descartará todos los valores duplicados. Veamos cómo podemos hacer esto usando bucles for y comprensión de conjuntos.

input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
  
output_set = set()
  
# Using loop for constructing output set
for var in input_list:
    if var % 2 == 0:
        output_set.add(var)
  
print("Output Set using for loop:", output_set)

Producción:

Output Set using for loop: {2, 4, 6}
# Using Set comprehensions 
# for constructing output set
  
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
  
set_using_comp = {var for var in input_list if var % 2 == 0}
  
print("Output Set using set comprehensions:",
                              set_using_comp)

Producción:

Output Set using set comprehensions: {2, 4, 6}

Comprensiones del generador:

Las comprensiones de generador son muy similares a las comprensiones de lista. Una diferencia entre ellos es que las comprensiones de generador usan corchetes circulares, mientras que las comprensiones de lista usan corchetes. La principal diferencia entre ellos es que los generadores no asignan memoria para toda la lista. En cambio, generan cada valor uno por uno, por lo que son eficientes en memoria. Veamos el siguiente ejemplo para comprender la comprensión del generador:

input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
  
output_gen = (var for var in input_list if var % 2 == 0)
  
print("Output values using generator comprehensions:", end = ' ')
  
for var in output_gen:
    print(var, end = ' ')

Producción:

Output values using generator comprehensions: 2 4 4 6 

Publicación traducida automáticamente

Artículo escrito por rituraj_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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