Comprensiones en Python

La comprensión en Python es una forma única de procesamiento de datos que puede construir una nueva estructura de secuencia de datos a partir de una secuencia de datos.

La comprensión en Python es una sintaxis potente y concisa, adecuada para generar listas, diccionarios, conjuntos y generadores.

Al usar comprensiones, hay que prestar atención a la legibilidad, manteniendo las expresiones lo más simples posible para no afectar la legibilidad y el mantenimiento del código.

Python admite comprensiones para varias estructuras de datos:

  • Comprensión de listas (list)
  • Comprensión de diccionarios (dict)
  • Comprensión de conjuntos (set)
  • Comprensión de tuplas (tuple)

Comprensión de listas

El formato de la comprensión de listas es:

[表达式 for 变量 in 列表] 
[out_exp_res for out_exp in input_list]

或者 

[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
  • out_exp_res: expresión que genera los elementos de la lista, puede ser una función con valor de retorno.
  • for out_exp in input_list: itera sobre input_list y pasa out_exp a la expresión out_exp_res.
  • if condition: sentencia condicional que puede filtrar los valores de la lista que no cumplen la condición.

Filtrar las cadenas con longitud menor o igual a 3 y convertir las restantes a mayúsculas:

Ejemplo

>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']

Calcular los enteros divisibles por 3 menores o iguales que 30:

Ejemplo

>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

Comprensión de diccionarios

Formato básico de la comprensión de diccionarios:

{ key_expr: value_expr for value in collection }

o 

{ key_expr: value_expr for value in collection if condition }

Crear un diccionario usando cadenas y sus longitudes:

Ejemplo

listdemo = ['Google','Ejemplo', 'Taobao']
# Usar cada cadena de la lista como clave y su longitud como valor, formando pares clave-valor
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'Ejemplo': 6, 'Taobao': 6}

Proporciona tres números, usa los tres números como claves y sus cuadrados como valores para crear un diccionario:

Ejemplo

>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>

Comprensión de conjuntos

Formato básico de la comprensión de conjuntos:

{ expression for item in Sequence }
o 
{ expression for item in Sequence if conditional }

Calcular los cuadrados de los números 1, 2, 3:

Ejemplo

>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}

Determinar las letras que no son 'abc' y mostrarlas:

Ejemplo

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>

Comprensión de tuplas (expresión generadora)

La comprensión de tuplas puede utilizar tipos de datos como rangos (range), tuplas, listas, diccionarios y conjuntos para generar rápidamente una tupla que cumpla con los requisitos especificados.

Formato básico de la comprensión de tuplas:

(expression for item in Sequence )
o 
(expression for item in Sequence if conditional )

El uso de la comprensión de tuplas es exactamente igual al de la comprensión de listas, solo que la comprensión de tuplas se escribe con()paréntesis para encerrar las partes, mientras que la comprensión de listas usa corchetes[], además, el resultado devuelto por la comprensión de tuplas es un objeto generador.

Por ejemplo, podemos usar el siguiente código para generar una tupla que contenga los números del 1 al 9:

Ejemplo

>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50>  # Devuelve un objeto generador

>>> tuple(a)       # Usando la función tuple(), se puede convertir directamente el objeto generador en una tupla
(1, 2, 3, 4, 5, 6, 7, 8, 9)
Otras extensiones