Skip to content

Commit fa4927f

Browse files
authored
Create abrangencia-de-listas-e-dicionarios.md
1 parent f479ff6 commit fa4927f

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
Title: Abrangência de Listas e Dicionários
2+
Slug: abrangencia-de-listas-e-dicionarios-com-python
3+
Date: 2017-01-16 10:37:39
4+
Category: Python
5+
Tags: python,tutorial,list comprehensions
6+
Author: Michell Stuttgart
7+
Email: michellstut@gmail.com
8+
Github: mstuttgart
9+
Linkedin: michellstut
10+
Facebook: michell.stuttgart
11+
Site: http://codigoavulso.com.br
12+
13+
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).
14+
15+
### Abrangência de listas
16+
17+
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!
18+
19+
#### Exemplo 1
20+
Vamos suport que temos a seguinte lista de valores:
21+
22+
```python
23+
valores = [1, 2, 3, 4, 5]
24+
```
25+
Queremos gerar uma outra lista contendo o dobro de cada um desses números, ou seja,
26+
27+
```python
28+
[2, 4, 6, 8, 10]
29+
```
30+
Inicialmente, podemos montar o seguinte código como solução:
31+
32+
```python
33+
# Recebe o nosso resultado
34+
valores_dobro = []
35+
36+
for val in valores:
37+
valores_dobro.append(val * 2)
38+
39+
print(valores_dobro)
40+
41+
>>>
42+
[2, 4, 6, 8, 10]
43+
44+
```
45+
46+
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:
47+
48+
```python
49+
valores_dobro = [valor*2 for valor in valores]
50+
```
51+
Bacana não? O exemplo seguinte podemos incrementar mais o exemplo acima.
52+
53+
#### Exemplo 2
54+
55+
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:
56+
57+
```python
58+
valores = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
59+
```
60+
61+
Assim como no exemplo anterior, podemos resolver utilizando um algoritmo básico.
62+
63+
```python
64+
# Lista que recebera o nosso resultado
65+
valores_dobro = []
66+
67+
for valor in valores:
68+
if valor % 2 == 0:
69+
valores_dobro.append(valor * 2)
70+
71+
print(valores_dobro)
72+
73+
>>>
74+
[4, 8, 12, 16, 20]
75+
76+
```
77+
Podemos também resolver o mesmo problema utilizando as funções nativas *map* e *filter*:
78+
79+
```python
80+
valores_dobro = map(lambda valor: valor * 2, filter(lambda valor: valor % 2 == 0, valores))
81+
```
82+
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*.
83+
84+
```python
85+
valores_dobro = [valor * 2 for valor in valores if valor % 2 == 0]
86+
```
87+
Muito mais simples, não? Vamos para o próximo exemplo.
88+
89+
#### Exemplo 3
90+
91+
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:
92+
93+
```python
94+
dicionario = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
95+
```
96+
97+
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:
98+
99+
```python
100+
novo_dicionario = {'b': 4, 'c': 6, 'd': 8, 'f': 12}
101+
```
102+
103+
Utilizando um algoritmo genérico, podemos reslo o problema da seguinte maneira:
104+
105+
```python
106+
novo_dicionario = {}
107+
108+
for chave, valor in dicionario:
109+
if chave in ['b', 'c', 'd', 'f']:
110+
novo_dicionario[chave] = 2 * valor
111+
112+
print(novo_dicionario)
113+
114+
>>
115+
{'b': 4, 'c': 6, 'd': 8, 'f': 12}
116+
117+
```
118+
Aplicando agora a abrangência, conseguimos compactar o código acima de maneira interessante:
119+
120+
```python
121+
novo_dicionario = {chave: 2 * valor for chave, valor in dicionario.items() if chave in ['b', 'c', 'd', 'f']}
122+
```
123+
124+
### Conclusão
125+
126+
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.
127+
128+
Até o próximo tutorial pessoal!
129+
130+
**Publicado originalmente:** [Abrangencia de listas e dicionários com Python](http://codigoavulso.com.br/abrangencia-de-listas-e-dicionarios.html)
131+
132+
### Referências
133+
134+
* [Python eficaz: 59 maneiras de programar melhor em Python; Slatkin, Brett; Novatec Editora, 2016.](https://novatec.com.br/livros/python-eficaz/)

0 commit comments

Comments
 (0)