Oi gente, tudo bem?
Para o exercício 09 da "hora da prática", eu fui por duas soluções que estão diferentes da resposta que foi sugerida pelo instrutor:
Na primeira, abaixo, deixei o código comentado passo a passo para ilustrar qual foi a minha lista de raciocínio para conseguir vencer o problema, no entanto, a forma como o instrutor propôs como resposta está muito mais enxuta do que a minha. Visto que estou criando contadores e listas adicionais, eu gostaria de saber se a forma como eu fiz está carregando muito o código e se estou seguindo uma eficiência de código aceitável para o problema. Também gostaria de saber se da forma como eu fiz, corro o risco de cair em alguma condição que não atenda ao que foi proposto no exercício.
estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']
#aqui tive que apelar para a consulta na resposta do exercício. não lembrava que o set já fazia filtro :)
estados_unicos = list(set(estados))
#crio a lista de estados_unicos
lista_de_unicos = []
#criando a lista que conta os estados unicos
contador_unicos = []
#fiz um for para passar por todos os estados unicos da lista que tem o "set"
for unicos in estados_unicos:
#alimento a lista de estados únicos a cada iteração
lista_de_unicos.append(unicos)
#inicio um contador para contar o número de estados únicos
count = 0
#inicio um indexador para iterar sobre o for da lista de estados
i = 0
#for que passa pela lista de cada estados, agora vou começar a comparar essa lista
#com os estados únicos
for i in range(len(estados)):
#condição para iterar o estado unico que está na vez e comparar com o
#o estado da lista de "estados"
if unicos == estados[i]:
#contador vai incrementando a medida em que a condição é atendida
count += 1
#incremento uma lista com as contagens obtidas
contador_unicos.append(count)
#dict comprehension com as chaves e valores pedidos no problema passando por toda a lista de
#estados únicos
dict_cont = {lista_de_unicos[i]: contador_unicos[i] for i in range(len(lista_de_unicos))}
print(dict_cont)
Aqui na segunda forma, eu deixei o estado como uma entrada de usuário. O valor digitado será verificado na lista de estados com a função "Counter" e a quantidade de incidências registradas num dict. Não fui por esse caminho, mas eu poderia continuar para que todos os valores digitados saíssem em um dict único contendo todos os valores digitados. Minha dúvida aqui é sobre a função counter. Ela é uma boa opção para o caso proposto mesmo? Em relação à lógica fica evidente que é muito mais simples, mas em relação à utilização de recursos de máquina, existe alguma vantagem em usar uma função já existente em vez de desenvolver os contadores por conta própria?
estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']
entrada = str(input('digite estado:'))
contagem = Counter(estados)
print(contagem[entrada])
consulta = {entrada: contagem[entrada]}
print(consulta)
Obrigado e parabéns pelo curso, estou evoluindo bastante com os conceitos apresentados.