Listar compreensões em Python

As compreensões de lista fornecem uma maneira de escrever for loops de forma mais concisa. Eles podem ser úteis quando você deseja criar novas listas a partir de listas existentes ou iteráveis. Por exemplo, você pode usar compreensões de lista para criar uma lista de quadrados de uma lista de números. Da mesma forma, você também pode usar algumas condições em uma lista de números para que a nova lista criada seja um subconjunto da lista original.

Tenha em mente que você não pode escrever todos os for loop como uma compreensão de lista. Mais uma coisa: o nome “compreensão de listas” pode ser um pouco confuso porque parece sugerir que as compreensões são apenas para trabalhar com listas. Na realidade, a palavra “lista” em compreensões de lista é usada para indicar que você pode fazer um loop sobre qualquer iterável em Python e o produto final seria uma lista.

Loops e compreensões de lista

As compreensões de lista básicas que não usam nenhuma condição têm o seguinte formato:

Vamos começar escrevendo um muito básico for loop para listar os primeiros 15 múltiplos de 5. Primeiro, você precisa criar uma lista vazia. Então, você deve iterar em um intervalo de números e multiplicá-los por 5. A nova sequência de números obtida consistirá em múltiplos de 5.

O de cima for loop basicamente tem a seguinte estrutura:

Se você comparar com o formulário de compreensão de lista que você leu anteriormente, você pode ver que é n, é range(1,16)e é n*5. Colocar esses valores na compreensão da lista nos dará o seguinte resultado:

Da mesma forma, você também pode obter uma lista com o cubo de números fornecidos como este:

Condições nas compreensões da lista

Você também pode usar um if condição para filtrar determinados valores da lista final. Nesse caso, a compreensão da lista assume a seguinte forma:

Um exemplo básico desse tipo de compreensão seria obter todos os números pares em um determinado intervalo. UMA for loop para fazer esta tarefa ficará assim:

A mesma coisa também pode ser realizada usando a seguinte compreensão de lista:

Um exemplo mais complexo de usar compreensões de lista seria adicionar .. if .. else .. expressões condicionais dentro deles.

Nesse caso, a ordem em que você apresenta as instruções dentro da compreensão da lista será diferente da usual if condições. Quando você tem apenas um if condição, a condição vai até o final da compreensão. No entanto, no caso de um .. if .. else .. expressão, as posições do for loop e a expressão condicional são trocados. A nova ordem é:

Vamos começar escrevendo o verbose .. if .. else .. expressão condicional para obter quadrados de números pares e cubos de números ímpares em um determinado intervalo.

A expressão condicional acima tem a seguinte estrutura:

Colocar os valores correspondentes nos lugares certos fornecerá a seguinte compreensão de lista:

Listar compreensões para loops aninhados

Você também pode usar loops aninhados em uma compreensão de lista. Não há limite para o número de for loops que você pode colocar dentro de uma compreensão de lista. No entanto, você deve ter em mente que a ordem dos loops deve ser a mesma no código original e na compreensão da lista. Você também pode adicionar um opcional if condição após cada for ciclo. Uma compreensão de lista com aninhada for loops terão a seguinte estrutura:

Os exemplos a seguir devem deixar tudo mais claro. Existem dois laços aninhados, e multiplicá-los nos dá tabelas de multiplicação.

Estes aninhados for loops podem ser reescritos como:

Depois de escrever o loop neste formulário, é fácil convertê-lo em uma compreensão de lista:

Você também pode usar uma compreensão de lista escrita semelhante para achatar uma lista de listas. O exterior for loop itera através de listas individuais e as armazena na variável row. O interior for loop irá então iterar através de todos os elementos na corrente row. Durante a primeira iteração, a variável row tem o valor [1, 2, 3, 4]. O segundo loop itera por esta lista ou row e anexa todos esses valores à lista final.

Compreensão de lista aninhada

As compreensões de lista aninhada podem parecer semelhantes às compreensões de lista com loops aninhados, mas são muito diferentes. No primeiro caso, você estava lidando com loops dentro de loops. Neste caso, você estará lidando com compreensões de lista dentro de compreensões de lista. Um bom exemplo de uso de compreensão de lista aninhada seria criar uma transposição da matriz para a seção anterior.

Sem uma expressão de compreensão de lista, você precisará usar duas for loops para criar a transposição.

O loop externo percorre a matriz quatro vezes porque há quatro colunas nele. O loop interno itera pelos elementos dentro da linha atual, um índice por vez, e o anexa a uma lista temporária chamada temp. o temp list é então anexada como uma linha à matriz transposta. No caso de compreensões de lista aninhada, o loop mais externo vem no final e o loop mais interno vem no início.

Aqui está o código acima na forma de uma compreensão de lista:

Outra maneira de ver isso é considerar a estrutura de compreensões de listas que substituem o básico. for loops que você aprendeu no início do artigo.

Se você comparar com a compreensão da lista aninhada acima, verá que neste caso é na verdade outra compreensão de lista: [row[n] for row in matrix]. Esta própria compreensão de lista aninhada está na forma de um for ciclo.

Pensamentos finais

Espero que este tutorial tenha ajudado você a entender o que são compreensões de lista e como usá-las no lugar do básico for loops para escrever código conciso e um pouco mais rápido ao criar listas.

Outra coisa que você deve ter em mente é a legibilidade do seu código. A criação de compreensões de lista para loops aninhados provavelmente tornará o código menos legível. Nesses casos, você pode dividir a compreensão da lista em várias linhas para melhorar a legibilidade.

Além disso, não hesite em ver o que temos disponível para venda e estudo no Envato Market, e não hesite em fazer perguntas e fornecer seu valioso feedback usando o feed abaixo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *