Atualizado: 04/11/2024

Compreensão de Lista (List Comprehension) - Python

A funcionalidade de compreensão de lista oferece uma forma mais concisa e direta para criar listas a partir de outros conjuntos de dados. Ela segue a seguinte estrutura:

newlist = [expression for item in iterable (if condition)]

A estrutura de compreensão de lista é composta pelos seguintes elementos:

  • iterable: uma fonte de dados iterável, que pode ser uma lista, conjunto, sequência ou até uma função que retorna dados, como range().

  • item: o elemento extraído da fonte de dados.

  • expression: uma expressão que retorna um valor, que será inserido na lista resultante.

  • condition: um critério opcional que define quais elementos da fonte de dados serão incluídos na lista. Se o elemento não atender à condição, ele não será selecionado.

Agora consideramos alguns exemplos.

Suponha que precisemos selecionar todos os números maiores que 0 em uma lista. Tradicionalmente, o código seria escrito assim:

numbers = [-3, -2, -1, 0, 1, 2, 3]
positive_numbers = []
for n in numbers:
    if n > 0:
        positive_numbers.append(n)

print(positive_numbers)  # [1, 2, 3]

Usando list comprehension, o código pode ser simplificado:

numbers = [-3, -2, -1, 0, 1, 2, 3]
positive_numbers = [n for n in numbers if n > 0]

print(positive_numbers)  # [1, 2, 3]

A expressão [n for n in numbers if n > 0] significa: selecione cada elemento n da lista numbers e o inclua no resultado se n for maior que 0.

Fonte de Dados iterable

A fonte de dados iterable pode ser qualquer objeto que suporte iteração, como listas, dicionários, etc. Por exemplo, a função range() retorna todos os números de zero até o limite especificado (exclusivo):

numbers = [n for n in range(10)]
print(numbers)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Podemos também usar essa construção para criar listas a partir de dicionários, como neste exemplo que seleciona todas as chaves:

dictionary = {"red": "vermelho", "blue": "azul", "green": "verde"}
words = [word for word in dictionary]
print(words)  # ['red', 'blue', 'green']

Retornando Resultados

O parâmetro expression representa a expressão que retorna o valor a ser incluído na lista gerada. Nos exemplos anteriores, expression foi o próprio elemento extraído da fonte de dados:

numbers = [-3, -2, -1, 0, 1, 2, 3]
new_numbers = [n for n in numbers]
print(new_numbers)  # [-3, -2, -1, 0, 1, 2, 3]

No entanto, podemos aplicar qualquer operação ou função ao elemento extraído. Por exemplo, para retornar o dobro de cada número:

numbers = [1, 2, 3, 4, 5]
doubled_numbers = [n * 2 for n in numbers]
print(doubled_numbers)  # [2, 4, 6, 8, 10]

Ou até mesmo expressões mais sofisticadas:

numbers = [-3, -2, -1, 0, 1, 2, 3]
new_numbers = [n * 2 if n > 0 else n for n in numbers]
print(new_numbers)  # [-3, -2, -1, 0, 2, 4, 6]

Nesse caso, a expressão é n * 2 if n > 0 else n, que retorna n * 2 se n for maior que 0, caso contrário, retorna n.

É possível fazer diversas transformações nas expressões. Por exemplo, podemos retornar valores de um dicionário com base em suas chaves:

dictionary = {"red": "vermelho", "blue": "azul", "green": "verde"}
words = [f"{key}: {dictionary[key]}" for key in dictionary]
print(words)  # ['red: vermelho', 'blue: azul', 'green: verde']

Condição

O parâmetro condition define um filtro para a seleção de elementos da fonte de dados. Por exemplo, para escolher apenas números pares:

numbers = [n for n in range(10) if n % 2 == 0]
print(numbers)  # [0, 2, 4, 6, 8]

Ou para selecionar apenas as chaves de um dicionário com mais de 3 caracteres:

dictionary = {"red": "vermelho", "blue": "azul", "green": "verde"}
words = [f"{key}: {dictionary[key]}" for key in dictionary if len(key) > 3]
print(words)  # ['blue: azul', 'green: verde']
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com