Compreensão da lista Python (com exemplos)

Neste artigo, aprenderemos sobre as compreensões de listas do Python e como usá-las.

Compreensão de lista x For Loop em Python

Suponha que desejamos separar as letras da palavra humane adicioná-las como itens de uma lista. A primeira coisa que vem em mente é usar o loop for.

Exemplo 1: Iterando através de uma string usando o for Loop

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

Quando executamos o programa, a saída será:

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

No entanto, Python tem uma maneira mais fácil de resolver esse problema usando a Compreensão de lista. A compreensão de listas é uma maneira elegante de definir e criar listas com base em listas existentes.

Vamos ver como o programa acima pode ser escrito usando compreensões de lista.

Exemplo 2: Iterando por meio de uma string usando a compreensão de lista

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

Quando executamos o programa, a saída será:

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

No exemplo acima, uma nova lista é atribuída à variável h_letters e a lista contém os itens da string iterável 'humano'. Chamamos a print()função para receber a saída.

Sintaxe de compreensão de lista

 (expressão para o item na lista)

Agora podemos identificar onde as compreensões de lista são usadas.

Se você percebeu, humané uma string, não uma lista. Este é o poder de compreensão de listas. Ele pode identificar quando recebe uma string ou tupla e trabalhar nisso como uma lista.

Você pode fazer isso usando loops. No entanto, nem todo loop pode ser reescrito como compreensão de lista. Mas, à medida que você aprende e se acostuma com as compreensões de listas, você se descobrirá substituindo mais e mais loops por essa sintaxe elegante.

Listar Comprehensions vs funções Lambda

As compreensões de listas não são a única maneira de trabalhar com listas. Várias funções integradas e funções lambda podem criar e modificar listas em menos linhas de código.

Exemplo 3: Usando funções Lambda dentro de List

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

Quando executamos o programa, a saída será

 ('humano')

No entanto, as compreensões de lista são geralmente mais legíveis por humanos do que as funções lambda. É mais fácil entender o que o programador estava tentando realizar quando as compreensões de lista são usadas.

Condicionais na compreensão de lista

Compreensões de lista podem utilizar declaração condicional para modificar a lista existente (ou outras tuplas). Criaremos uma lista que usa operadores matemáticos, inteiros e intervalo ().

Exemplo 4: usando if com compreensão de lista

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

Quando executamos o programa acima, a saída será:

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

A lista, number_list, será preenchida pelos itens no intervalo de 0 a 19 se o valor do item for divisível por 2.

Exemplo 5: IF aninhado com compreensão de lista

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

Quando executamos o programa acima, a saída será:

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

Aqui, as verificações de compreensão da lista:

  1. Y é divisível por 2 ou não?
  2. Y é divisível por 5 ou não?

Se y satisfizer ambas as condições, y será acrescentado a num_list.

Exemplo 6: if… else Com compreensão de lista

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

Quando executamos o programa acima, a saída será:

 ('Par', 'Ímpar', 'Par', 'Ímpar', 'Par', 'Ímpar', 'Par', 'Ímpar', 'Par', 'Ímpar')

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.
  • Lembre-se de que toda compreensão de lista pode ser reescrita em loop for, mas todo loop for não pode ser reescrito na forma de compreensão de lista.

Artigos interessantes...