Listar compreensões em Python

Listar compreensões em Python
As compreensões da lista são frequentemente usadas no Python para escrever declarações de linha única que criam uma nova lista ou dicionário, looping sobre um objeto iterável. Este artigo explicará como usar as compreensões da lista em Python, começando com uma explicação básica de como os loops funcionam no Python.

Para loop in python

Uma declaração para loop em Python itera sequencialmente sobre membros de qualquer objeto, lista, string etc. Comparado com outras linguagens de programação, sua sintaxe é muito mais limpa e não requer etapas de iteração para definir manualmente e iniciar a iteração. Embora existam maneiras de tornar seu comportamento o mesmo que outras linguagens de programação (não serão abordadas neste artigo). Você também pode exercer algum controle sobre loops usando declarações como continuar, quebrar, passar etc. Abaixo está um exemplo simples de loop em python:

para x no intervalo (10):
impressão (x)

O loop for imprimirá dez números a partir de 0 e terminando em 9.

Lista compreensões

A compreensão da lista não passa de uma maneira abreviada / concisa de escrever multi-line para loops em uma declaração de uma linha. O exemplo de compreensão da lista abaixo criará uma nova lista como [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], incluindo todos os valores de "x" nele.

números = [x para x no intervalo (10)]
Imprimir (números)

Observe que a compreensão da lista sempre cria uma nova lista e não modifica os iteráveis ​​originais usados ​​na expressão. Uma expressão típica de compreensão da lista deve ter uma cláusula "para" e pode ser seguida por declarações condicionais "se" e "else". Sem usar uma compreensão da lista, o exemplo acima será escrito da seguinte maneira:

números = []
para x no intervalo (10):
números.Anexar (x)
Imprimir (números)

Desempenho e legibilidade

As compreensões da lista são mais rápidas do que para loops. No entanto, a menos que você esteja iterando mais de centenas de milhares de itens, você não notará grandes melhorias de desempenho. Enquanto a compreensão da lista fornece uma maneira concisa de escrever para loops, expressões complexas podem levar a baixa legibilidade do código e aumento da verbosidade. É importante manter o código legível, a menos que atingir o desempenho máximo seja uma necessidade absoluta para o seu programa.

Exemplo: Usando a Sintaxe de compreensões da lista com dicionários e conjuntos

Um dicionário Python é uma coleção de elementos definidos em pares de valor-chave, enquanto um conjunto é uma coleção de valores únicos em que duplicatas não são permitidas. As compreensões da lista podem ser usadas com dicionários e conjuntos Python também. A sintaxe difere um pouco, em vez de encerrar a expressão em aparelhos quadrados, agora você terá que usar aparelhos encaracolados. Você também receberá um novo objeto de dicionário / conjunto em vez de uma nova lista.

Data = "City": "New York", "Nome": "John Doe"
formatted_data = k: v.título () para k, v em dados.Unid()
Print (formatted_data)

O exemplo acima converterá valores de string em caso de título e criará um novo dicionário chamado "formatted_data", cuja saída será: 'City': 'New York', 'Name': 'John Doe'. Você também pode alterar o dicionário / conjunto no local, especificando a variável de dicionário existente no lado esquerdo.

Data = "City": "New York", "Nome": "John Doe"
dados = k: v.título () para k, v em dados.Unid()
Impressão (dados)

Sem usar as compreensões do dicionário, o código ficaria assim:

Data = "City": "New York", "Nome": "John Doe"
formatted_data =
para k, v em dados.Unid():
formatted_data [k] = V.título()
Print (formatted_data)

Como não há pares de valor-chave nos conjuntos, uma compreensão de conjuntos pode ser definida da mesma maneira que uma compreensão de lista. A única diferença é o uso de aparelhos encaracolados.

Exemplo: múltiplo para loops em uma compreensão da lista

O exemplo de compreensão da lista mencionado acima é básico e usa uma única instrução "for". Abaixo está um exemplo que usa vários loops e uma instrução “se” condicional.

adjetivos = ["disco", "eoan", "focal", "artful"]
Animais = ["Dingo", "Ermine", "Fossa", "Beaver"]
codenames = [x + "" + y para x em adjetivos para y em animais se y.StartSwith (x [0])]
Imprimir (nomes de codenários)

O código mostrará ['disco dingo', 'eoan ermine', 'fossa focal'] como saída. Os dois para loops passam por listas de "adjetivos" e "animais" e seus membros se uniram usando um espaço, apenas se a primeira letra de ambas as palavras forem as mesmas. Sem usar as compreensões da lista, o código ficaria assim:

adjetivos = ["disco", "eoan", "focal", "artful"]
Animais = ["Dingo", "Ermine", "Fossa", "Beaver"]
codenames = []
para x em adjetivos:
Para Y em animais:
se y.StartSwith (x [0]):
Nomes de código.anexar (x + "" + y)
Imprimir (nomes de codenários)

Exemplo: Lista de compreensão com a cláusula if-else

O exemplo abaixo mostrará o uso de IF e outras declarações nas compreensões da lista.

número_list = [1, 2, 3, 4]
outro_list = [5, 6, 7, 8]
resultado = [true if (x + y) % 2 == mais false para x em número_list para y em outro_list]
Imprimir (resultado)

Ao fazer loop em duas listas, a compreensão da lista acima verifica se a soma do par de elementos é uniforme ou não. Executar o código acima mostrará [verdadeiro, falso, verdadeiro, falso, falso, verdadeiro, falso, verdadeiro, verdadeiro, falso, verdadeiro, falso, falso, verdadeiro, falso, verdadeiro] como saída. Sem usar a compreensão da lista, o código ficaria assim:

número_list = [1, 2, 3, 4]
outro_list = [5, 6, 7, 8]
resultado = []
para x em número_list:
para y em outra_list:
if (x + y) % 2 == 0:
resultado.Anexar (verdadeiro)
outro:
resultado.Anexar (falso)
Imprimir (resultado)

Conclusão

A List compreensões fornece uma boa maneira de escrever instruções de loop limpo e conciso. No entanto, eles podem ficar rapidamente complexos e difíceis de entender se vários loops e declarações condicionais são usadas. No final, isso chega ao nível de conforto de um programador, mas geralmente é uma boa ideia escrever um código explícito, legível e fácil de depurar, em vez de excessivamente usando as abreviação.