Indo Além - Listas e Dicionários#
Dicionários e listas são estruturas complexas e por conta disso é fácil usá-las de maneira confusa. Veremos aqui mais 3 padrões que ajudam a escrever código mais sucinto e direto.
Padrão 1 - acesso via índice ou elemento#
No código abaixo percorremos uma lista e fazemos a soma de seus elementos. Leia-o com atenção.
O for
passa por todo índice i
válido da lista, porém i
sempre é usado para obter o i-ésimo elemento de l
(l[i]
). Neste caso podemos fazer um for
mais simples que só percorre todos os elementos da lista. Veja abaixo
Padrão 2 - iteração em dicionários usando items()
#
Veja o código abaixo. Ele mostra o valor de toda chave que começa to a letra a.
# d é um dicionário com chaves string e valores int
for k, v for d.items():
if k[0] == 'a':
print(d[k])
....
Quanto usamos d.items()
já recebemos uma tupla com a chave k
e o valor v
correspondente. Logo, na linha #!print(d[k])
não precisamos novamente buscar d[k]
! Basta usar #!print(v)
.
Apesar de simples, essa mudança pode fazer a diferença se usarmos nomes de variáveis bons. Veja abaixo:
# dados é um dicionário com chaves string e valores int
for nome, idade in dados.items():
if nome[0] == 'a':
print(idade)
Não só melhoramos a legibilidade como deixamos claro que usaremos no loop tanto a chave nome
quanto o valor correspondente idade
.
Atenção: se for usar só as chaves pode fazer o loop for chave in dados.keys()
ou for chave in dados
(o padrão é percorrer as chaves). Se for usar só os valores pode usar for valor in dados.values()
.
Padrão 3 - modificar lista durante iteração#
Vamos usar como exemplo o código abaixo.
Exercício 1
Resposta
O tamanho da lista é modificado dentro do `for`, mas o loop sempre roda até o tamanho original da lista. Como ela diminui de tamanho isso faz o programa dar erro pois tentamos acessar um índice inexistente.
Uma regra importante com listas é a seguinte: se desejamos mudar seu tamanho durante a iteração então criamos uma nova lista. Por exemplo, no caso acima só adicionaríamos na lista nova se l[i] % 2 != 0
. Veja abaixo o código corrigido.
Note que agora nem precisamos mais do índice i
e podemos usar direto os elementos da lista. O mesmo vale para quando queremos adicionar novos elementos durante a iteração: criamos uma lista nova e adicionamos tanto os originais quanto os novos.
Hora de praticar#
Acesse os exercícios de refatoração no PrairieLearn e use os padrões acima para melhorar o código disponibilizado nos exercícios.