Como usar a compreensão de lista em Python

O uso oportuno da compreensão de lista em Python pode facilitar as operações iterativas de lista para você. Além de ser uma linha única, é mais legível e executa com mais eficiência.

No entanto, você pode ficar nervoso se não souber como usá-lo. Pode ser ainda mais frustrante se você não souber onde aplicá-lo em seu código. Aqui, mostraremos como usar a compreensão de lista em Python com alguns exemplos da vida real.

O que é compreensão de lista em Python e como funciona?

Criar uma lista de itens com Python é fácil. No entanto, a tarefa pode se tornar um pouco tediosa quando você precisa gerar uma lista de valores ou itens de operações matemáticas ou de string. É quando usar a compreensão de listas pode ser útil.

Uma vantagem de usar a compreensão de lista é que você pode realizar várias operações em uma única lista.

Em contraste, ele cria novos itens e os anexa a uma lista vazia que declara automaticamente. Portanto, em vez de fazer uma lista vazia manualmente e anexar a ela um loop for , a compreensão de lista do Python permite que você faça isso automaticamente, sem se preocupar com a forma como a nova lista chega.

O termo "compreensão de lista" vem do fato de que todas as operações estão em uma lista Python atribuída a uma variável nomeada. Como afirmamos anteriormente, ele permite que você execute operações específicas em uma única linha de código. Em seguida, anexa a saída a uma nova lista.

Por fim, você também pode usar a saída de uma compreensão de lista para outros fins. Isso porque ele empilha expressões em variáveis ​​separadas. Portanto, você pode consultá-los mais tarde.

Por exemplo, você pode estar copiando um site com a BeautifulSoup . Suponha que você pretenda obter o nome de todos os itens e seus preços no site.

Em seguida, você decide colocar os dados extraídos em um arquivo CSV ou Excel. A prática ideal é raspar o nome de todos os itens e seus preços e colocá-los em colunas separadas. No entanto, usar uma compreensão de lista, nesse caso, garante que você tenha os dados raspados em variáveis ​​dedicadas. Você pode então converter essas variáveis ​​em um DataFrame Python posteriormente.

Veja o exemplo abaixo:

 Products = [i.text for i in bs.find_all('name tags')]
Price = [i.text for i in bs.find_all('price tags')]

Depois de obter as variáveis ​​em loop, você pode colocá-las em colunas separadas em um DataFrame usando Pandas do Python.

Como criar e usar uma compreensão de lista em Python

O laço for é um iterador essencial em uma lista de compreensão. Geralmente, uma compreensão de lista em Python assume este formato:

 ComprehensionVariable = [expression for items in list]

Imprimir ComprehensionVariable produz o resultado do código acima como uma lista.

No entanto, tome cuidado para não confundir a compreensão de uma lista com um loop aberto para .

Por exemplo, vamos usar um loop aberto para obter uma lista de todos os múltiplos de três entre 1 e 30:

 myList = []
for i in range(1, 11):
myList.append(i * 3)
print(myList)
Output: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

Para comparar os dois, vamos fazer a mesma coisa usando uma compreensão de lista:

 multiplesOf3 = [i*3 for i in range(1, 11)]
print(multiplesOf3)
Output = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

Você também pode usar uma compreensão de lista com declarações condicionais. O código de exemplo abaixo imprime todos os números ímpares entre 1 e 10:

 oddNumbers = [i for i in range(1, 11) if not i%2==2]
print(oddNumbers)
Output = [1, 3, 5, 7, 9]

Agora, vamos também reescrever o código acima usando um loop aberto para :

 myList = []
for i in range(1, 11):
if not i%2 == 0:
myList.append(i)
print(myList)
Output: [1, 3, 5, 7, 9]

Relacionado: Como acrescentar uma lista em Python

Uma compreensão de lista também aceita instruções if aninhadas:

 oddNumbers = [i for i in range(1, 11) if not i%2==0 if i<4]
print(oddNumbers)
Output: [1, 3]

Ele também usa um loop for aninhado:

 someNums = [[i*2 for i in range(1, 3)] for _ in range(4)]
print(someNums)

Você também pode ter um loop for aninhado simples em uma compreensão de lista:

 someNums = [i*2 for i in range(1, 3) for k in range(4)]

Você também pode manipular strings com compreensão de lista Python. Vamos dar uma olhada na compreensão do contador de palavras abaixo:

 word = ["This is a python list comprehension tutorial"]
wordCounter = [i.count(' ') + 1 for i in word]
print(wordCounter)
Output: 7

Uma compreensão de lista também pode aceitar uma função que executa uma operação específica. Vamos inserir uma função multiplicadora que obtenha números pares em uma compreensão de lista para ver como isso funciona:

 Numbers = [4, 7, 8, 15, 17, 10]
def multiplier(n):
multiple = n*2
return multiple
multipleEven = [multiplier(i) for i in Numbers if i%2==0]
print(multipleEven)
Output: [8, 16, 20]

Você ainda pode escrever o código acima em uma única função sem usar compreensão. Mas uma compreensão de lista é útil quando você precisa realizar várias iterações e colocar cada uma delas em variáveis ​​separadas.

Por exemplo, você pode realizar outra operação em n e ter uma variável dedicada para ela. Vamos modificar a compreensão acima para gerar números pares a partir dos ímpares:

 multipleEvenFromOdds = [multiplier(i) for i in Numbers if not i%2==0]
print(multipleEvenFromOdds)
Output: [14, 30, 34]

Dicionário e conjunto de compreensões

Além de uma compreensão de lista, Python também oferece um dicionário e uma funcionalidade de compreensão de conjunto.

Dê uma olhada no exemplo de compreensão do dicionário abaixo para ver como funciona:

 corresponding = {i: i*2 for i in range(10) if not i%2==0}
print(corr)
Output: {1: 2, 3: 6, 5: 10, 7: 14, 9: 18}

O código acima percorre a lista de números entre 1 e 9 e os torna as chaves. Em seguida, diz ao Python para multiplicar cada chave por dois. Finalmente, ele apresenta os resultados dessa operação como os valores correspondentes para cada chave no array resultante.

Relacionado: Como arrays e listas funcionam em Python

Uma compreensão de conjunto é um pouco semelhante a uma compreensão de lista. Aqui está um exemplo de compreensão de conjunto:

 numbers = {i**(2) for i in range(10) if i%4==0}
print(numbers)
Output: {0, 16, 64}

No entanto, ao contrário da compreensão de lista, a compreensão de conjunto remove duplicatas:

 nums = {i for i in range(20) if i%2==1 for k in range(10) if k%2==1}
print(nums)
Output: {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}

Você pode experimentar o código acima usando uma compreensão de lista para ver como eles diferem.

Você pode usar a compreensão de listas todas as vezes?

Vimos diferentes exemplos de compreensão de listas e onde você pode usá-los. No entanto, como qualquer outro método Python, o caso de uso de uma compreensão de lista depende do problema específico que você deseja resolver. Portanto, você só deve usá-lo se for ideal para o problema específico que deseja resolver.

Um dos propósitos da compreensão de lista é simplificar seu código e torná-lo mais legível. Portanto, evite complexidade ao lidar com ela. Por exemplo, uma longa compreensão do Python pode se tornar complexa de ler. Isso vai contra o seu propósito.