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 human
e 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:
- Y é divisível por 2 ou não?
- 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.