Olá Pythonista!
No post de hoje, vamos aprender sobre uma ferramenta muito útil no dia a dia do Pythonista: List Comprehensions!
Com esse conceito, podemos otimizar a utilização de listas, sua criação e seu manuseio (e de quebra, diminuir algumas linhas de código).
Vamos ver as mais diversas formas de se utilizar list comprehensions e praticar com exemplos!
Ah, você sabia que a mesmo conceito pode ser aplicado aos dicionários (dict
) do Python?
Já abre o post sobre Dict Comprehensions em outra aba e corre pra lá quando terminar aqui!
Vá Direto ao Assunto…
- Listas em Python
- List Comprehensions (Compreensão de Listas)
- List Comprehensions com if
- List Comprehensions com vários if’s
- List Comprehensions com if + else
- Múltiplas List Comprehensions (aninhadas)
Listas em Python
Lista é uma estrutura de dados provida pela própria linguagem e que utilizamos muito na programação Python.
Saber como manuseá-las corretamente, otimizando seu código e tirando maior proveito daquilo que o Python nos proporciona, é sempre uma boa ideia.
Os seguintes métodos estão disponíveis em uma lista:
-
list.append(x)
: Adiciona um item ao fim da lista. -
list.extend(iterable)
: Adiciona todos os itens do iterável iterable ao fim da lista. -
list.insert(i, x)
: Insere um item em uma dada posição i. -
list.remove(x)
: Remove o primeiro elemento, cujo valor seja x. -
list.pop(i)
: Remove o item de posição i da lista e o retorna. Caso i não seja especificado, retorna o último elemento da lista. -
list.clear()
: Remove todos os elementos da lista. -
list.index(x[, start[, end]])
: Retorna o índice do primeiro elemento cujo valor seja x. -
list.count(x)
: Retorna o número de vezes que o valor x aparece na lista. -
list.sort(key=None, reverse=False)
: Ordena os items da lista (os argumentos podem ser usados para customizar a ordenação). -
list.reverse()
: Reverte os elementos da lista. -
list.copy()
: Retorna uma lista com a cópia dos elementos da lista de origem.
Em Python, utilizamos colchetes para criação de listas. Exemplo:
1
2
3
4
5
# Apenas números
lista_numerica = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# Letras e números
lista_alfanumerica = ['a', 'b', 'c', 1, 2, 3]
List Comprehensions (Compreensão de Listas)
List Comprehension foi concebida na PEP 202 e é uma forma concisa de criar e manipular listas.
Sua sintaxe básica é:
1
[expr for item in lista]
Em outras palavras: aplique a expressão expr
em cada item
da lista
.
Exemplo: dado o seguinte código:
1
2
for item in range(10):
lista.append(item**2)
Podemos reescrevê-lo, utilizando list comprehensions, da seguinte forma:
1
lista = [item**2 for item in range(10)]
Ou seja: aplique a potência de 2 em todos os itens da lista.
Outro Exemplo: dado o seguinte código, que transforma os itens da lista em maiúsculos:
1
2
for item in lista:
resultado.append(str(item).upper())
Podemos reescrevê-lo da seguinte forma:
1
resultado = [str(item).upper() for item in lista]
Está curtindo esse conteúdo?
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
![](/assets/img/desenho-30-dias-de-python.png)
List Comprehensions com if
List comprehensions podem utilizar expressões condicionais para criar listas ou modificar listas existentes.
Sua sintaxe básica é:
1
[expr for item in lista if cond]
Ou seja:
Aplique a expressão
expr
em cadaitem
dalista
caso a condiçãocond
seja satisfeita.
Vamos criar algumas listas utilizando condições.
Por exemplo, podemos retirar os números ímpares de um conjunto de número da seguinte forma:
1
resultado = [numero for numero in range(20) if numero % 2 == 0]
O que resulta em:
1
resultado = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Vamos ver como fica com vários if’s.
List Comprehensions com vários if’s
Podemos verificar condições em duas listas diferentes dentro da mesma list comprehension.
Por exemplo: gostaríamos de saber os Múltiplos Comuns de 5 e 6.
Utilizando múltiplos if's
e list comprehensions, podemos criar o seguinte código:
1
resultado = [numero for numero in range(100) if numero % 5 == 0 if numero % 6 == 0]
Ou seja, o número só será passado para lista resultado
caso sua divisão por 5 E por 6 seja igual à zero.
O resultado do código acima será:
1
resultado = [0, 30, 60, 90]
List Comprehensions com if + else
Outra forma de se utilizar expressões condicionais e list comprehension é usar o conjunto if
+ else
.
A sintaxe básica para essa construção é:
1
[resultado_if if expr else resultado_else for item in lista]
Em outras palavras: para cada item da lista, aplique o resultado resultado_if
se a expressão expr
for verdadeira,
caso contrário, aplique resultado_else
.
Por exemplo, queremos criar uma lista que contenha “1” quando determinado número for múltiplo de 5 e “0” caso contrário.
Podemos codificá-lo da seguinte forma:
1
resultado = ['1' if numero % 5 == 0 else '0' for numero in range(16)]
Dessa forma, teremos o seguinte resultado:
1
resultado = ['1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '1']
Múltiplas List Comprehensions (aninhadas)
É aqui que a brincadeira fica séria!
Vamos supor que queiramos transpor uma matriz.
Pra quem não lembra o que é a Transposição de uma Matriz, vamos relembrar:
Transpor uma matriz, significa transformar as linhas em colunas e vice-versa.
Ou seja, data a seguinte matriz:
1
2
3
4
5
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
Queremos o seguinte resultado:
Em Python, podemos fazer isso da seguinte forma:
1
2
3
4
5
6
7
8
9
transposta = []
matriz = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
for i in range(len(matriz[0])):
linha_transposta = []
for linha in matriz:
linha_transposta.append(linha[i])
transposta.append(linha_transposta)
A matriz transposta
conteria:
1
transposta = [[1, 4, 9], [2, 5, 10], [3, 6, 11], [4, 8, 12]]
Podemos reescrever o código acima, de transposição de matrizes, da seguinte forma, utilizando list comprehension:
1
2
matriz = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
transposta = [[linha[i] for linha in matriz] for i in range(4)]
No código acima:
- No primeiro loop,
i
assume o valor de 0, portanto[linha[0] for linha in matriz]
vai retornar o primeiro elemento de cada linha:[1, 4, 9]
- No segundo loop,
i
assume o valor de 1, portanto[linha[1] for linha in matriz]
vai retornar o segundo elemento de cada linha:[2, 5, 10]
- No terceiro loop,
i
assume o valor de 2, portanto[linha[2] for linha in matriz]
vai retornar o terceiro elemento de cada linha:[3, 6, 11]
- No quarto loop,
i
assume o valor de 3, portanto[linha[3] for linha in matriz]
vai retornar o quarto elemento de cada linha:[4, 8, 12]
Obtendo, assim, o mesmo resultado.
Conclusão
Nesse post vimos como podemos usar list comprehensions para criar e manipular listas de maneira concisa e eficiente.
Vimos quão poderosa essa ferramenta é e as diversas formas de utilizá-la.
Agora que você está craque em List Comprehensions, que tal começar a utilizá-lo?
Então… Mão na massa!
Até o próximo post!