Compreensão de Listas Python: Tutorial Completo com Exemplos

Em Python, as chamadas “list comprehensions” (compreensões de lista) são ferramentas poderosas para gerar novas listas a partir de outras já existentes, incluindo listas, strings e tuplas.

A sua sintaxe concisa permite que se criem novas listas com apenas uma linha de código. Este artigo explicará como você pode realizar essa tarefa.

Nos próximos minutos, você aprenderá:

  • Como gerar uma nova lista através de loops `for`,
  • A estrutura sintática das compreensões de lista em Python e
  • Como ajustar as compreensões de lista usando a instrução condicional `if`.

Além disso, você também encontrará exemplos práticos que facilitarão a sua compreensão das “list comprehensions”.

Vamos começar! 🚀

Criando Listas Python com Loops `for`

Suponha que você tenha uma lista de números chamada `nums`. Você deseja criar uma nova lista contendo o cubo de cada número em `nums`. Veja como você faria isso utilizando um loop `for` em Python:

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# Saída
[8, 27, 125, 343]

No código acima, temos os seguintes passos:

  • Inicializamos uma lista vazia chamada `num_cubes`.
  • Iteramos sobre a lista de números.
  • Para cada número `num`, calculamos seu cubo usando o operador de exponenciação: `num**3`.
  • Finalmente, adicionamos o valor do cubo à lista `num_cubes`.

Observação: Em Python, o operador de exponenciação `**` é usado com a sintaxe: `num**pow`, onde o número `num` é elevado à potência `pow`.

Entretanto, você pode realizar essa mesma tarefa de forma mais simples usando as compreensões de lista em Python. Vamos aprender sua sintaxe.

Sintaxe da Compreensão de Lista Python

A estrutura geral da compreensão de lista é mostrada a seguir.

<nova_lista> = [<expressão> for <item> in <iterável>]

Vamos analisar essa sintaxe:

  • Em Python, as listas são delimitadas por colchetes `[]`. Portanto, a instrução de compreensão de lista deve estar dentro de `[]`.
  • `for in ` significa que estamos percorrendo um iterável. Qualquer objeto Python que possa ser percorrido e acessado individualmente, como listas, tuplas e strings, é considerado um iterável.
  • `` é o resultado que será calculado para cada `` no ``.

É bem simples, não é?

Basicamente, você está realizando uma ação para cada item de uma lista (ou qualquer iterável) para gerar uma nova lista.

Simplificando, a sintaxe pode ser vista na imagem abaixo.

Sintaxe de compreensão de lista Python (imagem do autor)

Agora que você conhece a sintaxe, é hora de colocar a mão na massa. Você pode usar um ambiente de desenvolvimento Python online ou em sua máquina local para acompanhar os exemplos.

Exemplos de Compreensão de Lista Python

Anteriormente, você gerou a nova lista `num_cubes` a partir de `nums`. Vamos começar reescrevendo esse processo com a compreensão de lista.

Usando a Compreensão de Lista com Números

Vamos usar a sintaxe simplificada da seguinte forma:

  • ``: Aqui, você quer obter o cubo de cada `num`. Substitua `` por `num**3`.
  • ``: A variável do loop é `num`, os números individuais da lista.
  • ``: A lista original que temos é `nums`.
  • E a expressão final fica: `[num**3 for num in nums]`. ✅

Juntando tudo, temos o seguinte trecho de código:

num_cubes = [num**3 for num in nums]
print(num_cubes)

# Saída
[8, 27, 125, 343]

Parabéns, você criou sua primeira compreensão de lista! 🎉

A seguir, vamos trabalhar com strings em Python.

Usando a Compreensão de Lista com Strings

Imagine que você tenha uma lista de autores. Você pode substituir os nomes abaixo pelos seus autores favoritos. 😄

authors = ["jane austen","george orwell","james clear","cal newport"]

Observe que os nomes dos autores estão em letras minúsculas na lista. Vamos formatá-los com letras maiúsculas no início de cada palavra e armazená-los em uma nova lista chamada `author_list`.

Observação: Em Python, o método de string `title()` recebe uma string como argumento e retorna uma cópia da string com letras maiúsculas no início de cada palavra. Ex: Nome Sobrenome.

Então, aqui está o que você precisa fazer:

  • Percorrer a lista de autores e para cada autor,
  • chamar `author.title()` para obter uma cópia da string com letras maiúsculas no início de cada palavra.

O código Python para isso é mostrado abaixo:

authors = ["jane austen","george orwell","james clear","cal newport"]

author_list = [author.title() for author in authors]
print(author_list)

# Saída
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

Na saída acima, veja como todos os nomes foram formatados com letras maiúsculas no início de cada palavra.

Usando a Compreensão de Lista com Múltiplas Listas

Até agora, você aprendeu como usar a compreensão de lista para criar novas listas a partir de uma lista existente. Agora, vamos aprender como gerar uma nova lista a partir de múltiplas listas.

Por exemplo, imagine o seguinte problema: você tem duas listas, `l_arr` e `b_arr`, contendo os comprimentos e larguras de 4 retângulos.

Você precisa criar uma nova lista, `area`, contendo a área desses 4 retângulos. Lembre-se, área = comprimento * largura.

l_arr = [4,5,1,3]
b_arr = [2,1,7,9]

Você precisa dos elementos de ambas as listas (`l_arr` e `b_arr`) para calcular a área. Isso pode ser feito com a função `zip()` do Python.

Observação: Em Python, a função `zip()` recebe um ou mais iteráveis como argumentos, com a sintaxe `zip(*iteráveis)`. Ela retorna um iterador de tuplas, onde a tupla i contém o elemento i de cada iterável.

A imagem a seguir explica isso em detalhes. Você tem 4 valores em `l_arr` e `b_arr`, então o intervalo de índices é de 0 a 3. Como você pode ver, a tupla 0 contém `l_arr[0]` e `b_arr[0]`, a tupla 1 contém `l_arr[1]` e `b_arr[1]` e assim por diante.

Função `zip()` do Python (Imagem do autor)

Portanto, você pode percorrer `zip(l_arr,b_arr)` como mostrado abaixo:

area = [l*b for l,b in zip(l_arr,b_arr)]
print(area)

# Saída
[8,5,7,27]

Na próxima seção, você aprenderá como usar instruções condicionais em uma compreensão de lista.

Compreensão de Lista Python com Sintaxe Condicional

Vamos começar com base na sintaxe anterior para a compreensão de lista.

Aqui está a sintaxe:

<nova_lista> = [<expressão> for <item> in <iterável> if <condição>]

Em vez de calcular a `` para todos os itens, você fará isso apenas para aqueles que atendem a uma `` específica – onde condição := Verdadeiro. Isso leva a uma sintaxe simplificada, como mostrado:

Compreensão de lista Python com sintaxe de condição (imagem do autor)

Com isso, vamos prosseguir para exemplos de código.

Compreensão de Lista Python com Exemplos de Condição

#1. Você recebe a string “Estou aprendendo Python em 2022”. Você deseja obter uma lista de todos os dígitos presentes na string. Como você faz isso?

Em Python, `.isdigit()` age em um caractere `` e retorna `True` se ele for um dígito (0-9); caso contrário, retorna `False`.

O trecho de código abaixo mostra como coletar a lista de todos os dígitos na string `str1`.

str1 = "Estou aprendendo Python3 em 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# Saída
['3', '2', '0', '2', '2']

No código acima:

  • Você percorre a string `str1`,
  • acessa cada caractere para verificar se é um dígito usando o método `isdigit()` e
  • adiciona o caractere à nova lista `digits` apenas se ele for um dígito.

Vamos ver outro exemplo.

#2. Você tem uma lista de frutas. 🍊 E você deseja criar uma lista `starts_with_b` que contenha todas as frutas da lista de frutas que começam com ‘b’. Você pode usar o método `startswith()` para escrever a condição.

`.startswith(‘char’)` retorna `True` se `` começar com `’char’`; caso contrário, retorna `False`.

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# Saída
['blueberry', 'banana']

Na saída acima, obtemos ‘blueberry’ e ‘banana’, que são as duas frutas que começam com ‘b’ na lista `fruits`, como esperado.

E isso conclui nossa discussão sobre compreensão de listas.

Conclusão

Espero que este tutorial tenha ajudado você a compreender as compreensões de lista em Python.

Vamos resumir:

  • Você pode usar `[<faça isso> for <todos-os-itens> in <esta-lista>]` para criar uma nova lista usando a compreensão de lista.
  • Além disso, você pode usar a sintaxe `[<faça isso> for <todos-os-itens> in <esta-lista> if <condição-é-Verdadeira>]` com a instrução condicional `if`.

Além disso, você também codificou diversos exemplos. Como próximo passo, você pode tentar reescrever alguns de seus loops Python existentes para criação de listas usando compreensão de lista. Bons estudos! Até o próximo tutorial. 😄

Agora você pode ver como converter uma lista em um dicionário ou aprender a manipular arquivos em Python.