Comprensión de listas de Python (con ejemplos)

En este artículo, aprenderemos sobre las comprensiones de listas de Python y cómo usarlas.

Comprensión de listas vs For Loop en Python

Supongamos que queremos separar las letras de la palabra humany agregar las letras como elementos de una lista. Lo primero que me viene a la mente es usar for loop.

Ejemplo 1: iterando a través de una cadena usando for Loop

 h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)

Cuando ejecutamos el programa, la salida será:

 ('h', 'u', 'm', 'a', 'n')

Sin embargo, Python tiene una forma más sencilla de resolver este problema mediante la comprensión de listas. La comprensión de listas es una forma elegante de definir y crear listas basadas en listas existentes.

Veamos cómo se puede escribir el programa anterior usando listas por comprensión.

Ejemplo 2: iterar a través de una cadena usando la comprensión de listas

 h_letters = ( letter for letter in 'human' ) print( h_letters)

Cuando ejecutamos el programa, la salida será:

 ('h', 'u', 'm', 'a', 'n')

En el ejemplo anterior, se asigna una nueva lista a la variable h_letters, y la lista contiene los elementos de la cadena iterable 'humano'. Llamamos a la print()función para recibir la salida.

Sintaxis de la comprensión de listas

 (expresión para el elemento de la lista)

Ahora podemos identificar dónde se utilizan las listas por comprensión.

Si lo notó, humanes una cadena, no una lista. Este es el poder de la comprensión de listas. Puede identificar cuándo recibe una cadena o una tupla y trabajar en ella como una lista.

Puedes hacerlo usando bucles. Sin embargo, no todos los bucles pueden reescribirse como comprensión de listas. Pero a medida que aprenda y se sienta cómodo con las listas por comprensión, se encontrará reemplazando más y más bucles con esta elegante sintaxis.

Lista de comprensiones frente a funciones Lambda

Las listas por comprensión no son la única forma de trabajar con listas. Varias funciones integradas y funciones lambda pueden crear y modificar listas en menos líneas de código.

Ejemplo 3: uso de funciones Lambda dentro de List

 letters = list(map(lambda x: x, 'human')) print(letters)

Cuando ejecutamos el programa, la salida será

 ('humano')

Sin embargo, las listas por comprensión suelen ser más legibles por humanos que las funciones lambda. Es más fácil comprender lo que el programador estaba tratando de lograr cuando se utilizan listas por comprensión.

Condicionales en la comprensión de listas

Las listas por comprensión pueden utilizar una declaración condicional para modificar la lista existente (u otras tuplas). Crearemos una lista que use operadores matemáticos, enteros y rango ().

Ejemplo 4: Usar if con comprensión de listas

 number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)

Cuando ejecutamos el programa anterior, la salida será:

 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

La lista, number_list, se completará con los elementos en el rango de 0 a 19 si el valor del elemento es divisible por 2.

Ejemplo 5: SI anidado con comprensión de listas

 num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)

Cuando ejecutamos el programa anterior, la salida será:

 (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

Aquí, enumere las comprobaciones de comprensión:

  1. ¿Y es divisible por 2 o no?
  2. ¿Y es divisible por 5 o no?

Si y satisface ambas condiciones, y se agrega a num_list.

Ejemplo 6: if … else con comprensión de listas

 obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)

Cuando ejecutamos el programa anterior, la salida será:

 ('Par', 'Impar', 'Par', 'Impar', 'Par', 'Impar', 'Par', 'Impar', 'Par', 'Impar')

Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even is appended to the obj list. If not, Odd is appended.

Nested Loops in List Comprehension

Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.

Example 7: Transpose of Matrix using Nested Loops

 transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)

Output

 ((1, 4), (2, 5), (3, 6), (4, 8)) 

The above code use two for loops to find transpose of the matrix.

We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.

Example 8: Transpose of a Matrix using List Comprehension

 matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)

When we run the above program, the output will be:

 ((1, 3, 5, 7), (2, 4, 6, 8))

In above program, we have a variable matrix which have 4 rows and 2 columns.We need to find transpose of the matrix. For that, we used list comprehension.

**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2) is executed before row(i) for row in matrix. Hence at first, a value is assigned to i then item directed by row(i) is appended in the transpose variable.

Key Points to Remember

  • List comprehension is an elegant way to define and create lists based on existing lists.
  • List comprehension is generally more compact and faster than normal functions and loops for creating list.
  • However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
  • Recuerde, cada lista de comprensión se puede reescribir en un ciclo for, pero cada ciclo for no se puede reescribir en forma de comprensión de lista.

Articulos interesantes...