Lista de comprensiones en Python

List Comprehensions Python



Las listas por comprensión se utilizan a menudo en Python para escribir declaraciones de una sola línea que crean una nueva lista o diccionario haciendo un bucle sobre un objeto iterable. Este artículo explicará cómo usar listas por comprensión en Python, comenzando con una explicación básica de cómo funcionan los bucles for en Python.

For Loop en Python

Una instrucción de bucle for en Python itera secuencialmente sobre los miembros de cualquier objeto, lista, cadena, etc. En comparación con otros lenguajes de programación, su sintaxis es mucho más limpia y no requiere definir manualmente los pasos de iteración ni iniciar la iteración. Aunque hay formas de hacer que su comportamiento sea igual al de otros lenguajes de programación (no se tratará en este artículo). También puede ejercer cierto control sobre los bucles for mediante el uso de declaraciones como continue, break, pass, etc. A continuación se muestra un ejemplo simple de bucle for en Python:







porxen distancia(10):
impresión(x)

El ciclo for anterior imprimirá diez números comenzando desde 0 y terminando en 9.



Lista de comprensiones

La comprensión de listas no es más que una forma abreviada / concisa de escribir bucles for de varias líneas en una declaración de una sola línea. El siguiente ejemplo de comprensión de listas creará una nueva lista como [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] al incluir todos los valores de x en ella.



números= [xporxen distancia(10)]
impresión (números)

Tenga en cuenta que la comprensión de la lista siempre crea una nueva lista y no modifica los iterables originales utilizados en la expresión. Una expresión típica de comprensión de lista debe tener una cláusula for y puede ir seguida de declaraciones condicionales if y else. Sin usar una lista de comprensión, el ejemplo anterior se escribirá de la siguiente manera:





números= []
porxen distancia(10):
números.adjuntar(x)

impresión (números)

Rendimiento y legibilidad

Las listas por comprensión son más rápidas que los bucles for. Sin embargo, a menos que esté iterando sobre cientos de miles de elementos, no notará mejoras importantes en el rendimiento. Si bien la comprensión de listas proporciona una forma concisa de escribir bucles for, las expresiones complejas pueden provocar una legibilidad deficiente del código y una mayor verbosidad. Es importante mantener el código legible, a menos que lograr el máximo rendimiento sea una necesidad absoluta para su programa.

Ejemplo: uso de la sintaxis de comprensiones de listas con diccionarios y conjuntos

Un diccionario de Python es una colección de elementos definidos en pares clave-valor, mientras que un conjunto es una colección de valores únicos donde no se permiten duplicados. Las listas por comprensión también se pueden usar con diccionarios y conjuntos de Python. La sintaxis difiere ligeramente, en lugar de envolver la expresión entre llaves, ahora tendrá que usar llaves. También obtendrá un nuevo diccionario / objeto de conjunto en lugar de una nueva lista.



datos= {'ciudad':'Nueva York', 'nombre':'john doe'}

formatted_data= {k: v.título() porpara,vendatos.elementos()}

impresión (formatted_data)

El ejemplo anterior convertirá valores de cadena en mayúsculas y minúsculas y creará un nuevo diccionario llamado formatted_data, cuya salida será: {‘city’: ‘New York’, ‘name’: ‘John ​​Doe’}. También puede cambiar el diccionario / establecer en el lugar especificando la variable de diccionario existente en el lado izquierdo.

datos= {'ciudad':'Nueva York', 'nombre':'john doe'}

datos= {k: v.título() porpara,vendatos.elementos()}

impresión (datos)

Sin usar comprensiones de diccionario, el código se vería así:

datos= {'ciudad':'Nueva York', 'nombre':'john doe'}

formatted_data= {}

porpara,vendatos.elementos():
formatted_data[para] =v.título()

impresión (formatted_data)

Como no hay pares clave-valor en los conjuntos, una comprensión de conjunto se puede definir de la misma manera que una comprensión de lista. La única diferencia es el uso de llaves.

Ejemplo: múltiples bucles for en una comprensión de lista

El ejemplo de comprensión de listas mencionado anteriormente es básico y usa una sola declaración for. A continuación se muestra un ejemplo que usa múltiples bucles for y una instrucción if condicional.

adjetivos= ['Disco', 'Eoan', 'Focal', 'Ingenioso']

animales= ['Dingo', 'Armiño', 'El hoyo', 'Castor']

nombres en clave= [x +' '+ yporxenadjetivosporyenanimalessiy.comienza con(x[0])]

impresión (nombres en clave)

El código mostrará [‘Disco Dingo’, ‘Eoan Ermine’, ‘Focal Fossa’] como resultado. Los dos bucles for pasan por listas de adjetivos y animales y sus miembros se unen usando un espacio, solo si la primera letra de ambas palabras es la misma. Sin usar listas por comprensión, el código se vería así:

adjetivos= ['Disco', 'Eoan', 'Focal', 'Ingenioso']
animales= ['Dingo', 'Armiño', 'El hoyo', 'Castor']

nombres en clave= []

porxenadjetivos:
poryenanimales:
siy.comienza con(x[0]):
nombres en clave.adjuntar(x +' '+ y)

impresión (nombres en clave)

Ejemplo: Comprensión de listas con cláusula if-else

El siguiente ejemplo mostrará el uso de declaraciones if y else en listas por comprensión.

lista_números= [1, 2, 3, 4]
otra_lista= [5, 6, 7, 8]

resultado= [Cierto si (x + y)%2 == 0 demás Falso porxenlista_númerosporyenotra_lista]

impresión (resultado)

Mientras recorre dos listas, la comprensión de la lista anterior verifica si la suma del par de elementos es par o no. Ejecutar el código anterior le mostrará [Verdadero, Falso, Verdadero, Falso, Falso, Verdadero, Falso, Verdadero, Verdadero, Falso, Verdadero, Falso, Falso, Verdadero, Falso, Verdadero] como resultado. Sin usar la comprensión de listas, el código se vería así:

lista_números= [1, 2, 3, 4]
otra_lista= [5, 6, 7, 8]
resultado= []

porxenlista_números:
poryenotra_lista:
si (x + y)%2 == 0:
resultado.adjuntar(Cierto)
demás:
resultado.adjuntar(Falso)

impresión (resultado)

Conclusión

Las listas por comprensión proporcionan una forma agradable de escribir declaraciones de bucle limpias y concisas. Sin embargo, pueden volverse rápidamente complejos y difíciles de entender si se utilizan varios bucles y declaraciones condicionales. Al final, se trata del nivel de comodidad de un programador, pero en general es una buena idea escribir código explícito, legible y fácil de depurar en lugar de usar taquigrafía excesivamente.