Quantcast
Channel: Planet Python
Viewing all articles
Browse latest Browse all 22462

PythonClub - A Brazilian collaborative blog about Python: Abrangência de Listas e Dicionários

$
0
0

A utilização de listas em Python é algo trivial. A facilidade provida pela linguagem aliada a simplicidade da estrutura de dados list a torna, ao lado dos dicionários dict, uma das estrutura de dados mais utilizadas em Python. Aqui neste tutorial irei compartilhar algo que aprendi trabalhando com listas e dicionário em Python, mais especificamente no que diz respeito a abrangência de listas (e dicionários).

Abrangência de listas

A abrangência de listas, ou do inglês list comprehensions, é um termo utilizado para descrever uma sintaxe compacta que o Python nos oferece para criamos uma lista baseada em outra lista. Pareceu confuso? Ok, vamos aos exemplos!

Exemplo 1

Vamos suport que temos a seguinte lista de valores:

valores=[1,2,3,4,5]

Queremos gerar uma outra lista contendo o dobro de cada um desses números, ou seja,

[2,4,6,8,10]

Inicialmente, podemos montar o seguinte código como solução:

# Recebe o nosso resultadovalores_dobro=[]forvalinvalores:valores_dobro.append(val*2)print(valores_dobro)>>>[2,4,6,8,10]

A solução acima é uma solução simples e resolve nosso problema, entretanto para algo tão simples precisamos de 4 linhas de código. Este exemplo é uma situação onde a abrangência de lista pode ser útil. Podemos compactar a criação da lista valores_dobro da seguinte maneira:

valores_dobro=[valor*2forvalorinvalores]

Bacana não? O exemplo seguinte podemos incrementar mais o exemplo acima.

Exemplo 2

Vamos supor que desejamos criar uma lista onde apenas os valores pares (resto da divisão por 2 é zero) serão multiplicados por 2. Abaixo temos a nossa lista de valores:

valores=[1,2,3,4,5,6,7,8,9,10]

Assim como no exemplo anterior, podemos resolver utilizando um algoritmo básico.

# Lista que recebera o nosso resultadovalores_dobro=[]forvalorinvalores:ifvalor%2==0:valores_dobro.append(valor*2)print(valores_dobro)>>>[4,8,12,16,20]

Podemos também resolver o mesmo problema utilizando as funções nativas map e filter:

valores_dobro=map(lambdavalor:valor*2,filter(lambdavalor:valor%2==0,valores))

Muito mais complicada não é? Apesar de resolver nosso problema, expressões como a acima são difíceis de ler e até mesmo de escrever. Em casos como esse, podemos novamente compactar nosso algoritmo utilizando a abrangência de lista.

valores_dobro=[valor*2forvalorinvaloresifvalor%2==0]

Muito mais simples, não? Vamos para o próximo exemplo.

Exemplo 3

De maneira semelhante a lista, nós também podemos aplicar a abrangência em lista e dicionários. Segue um exemplo onde temos o seguinte dicionário:

dicionario={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}

Vamos criar um segundo dicionário contendo apenas as chaves que são consoantes, ou seja, b, c, d e f, sendo que o valor para cada uma dessas chaves deve ser o dobro do valor armazenado na respectiva chave do dicionário original. Complicado? Em outras palavras, o novo dicionário deve ficar assim:

novo_dicionario={'b':4,'c':6,'d':8,'f':12}

Utilizando um algoritmo genérico, podemos reslo o problema da seguinte maneira:

novo_dicionario={}forchave,valorindicionario:ifchavein['b','c','d','f']:novo_dicionario[chave]=2*valorprint(novo_dicionario)>>{'b':4,'c':6,'d':8,'f':12}

Aplicando agora a abrangência, conseguimos compactar o código acima de maneira interessante:

novo_dicionario={chave:2*valorforchave,valorindicionario.items()ifchavein['b','c','d','f']}

Conclusão

Chegamos ao final de mais um tutorial! Sempre temos de ter em mente que tão importante quanto escrever um código que funciona, é mantê-lo (seja por você ou por outro programador). Neste ponto, a abrangência de lista (e outras estruturas de dados) nos ajudam a escrever um código claro e fácil de dar manutenção.

Até o próximo tutorial pessoal!

Publicado originalmente:Abrangencia de listas e dicionários com Python

Referências


Viewing all articles
Browse latest Browse all 22462

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>