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.