1
resposta

[Projeto] Corrigindo posições na lista de uma corrida de atletismo

lista = ['carlos', 'maria', 'pedro', 'joana']
print(f'Lista original {lista}')
incorreto = input('Digite o nome incorreto: ')
if incorreto in lista:
    correto = input('Digite o nome correto:')
    posicao = lista.index(incorreto)
    lista.remove(incorreto)
    lista.insert(posicao, correto)
    print(f'O nome {incorreto}, foi substituido por {correto}')
    print(f'Lista atualizada: {lista}')
else:
    print('Nome nao encontrado.')
1 resposta

Olá, Apollo. Como vai?

O seu código ficou excelente! Você resolveu o desafio de forma muito lógica e estruturada. A escolha de usar a condicional if incorreto in lista: antes de realizar as operações é uma ótima prática de programação defensiva, pois evita que o programa sofra uma quebra fatal (runtime error) caso o usuário digite um nome que não existe na lista.

A sua sequência de manipulação de índices também foi muito bem pensada: encontrar a posição com .index(), remover o elemento antigo com .remove() e inserir o novo na mesma vaga com .insert(). O algoritmo funciona perfeitamente e cumpre o objetivo de forma impecável!

Uma alternativa mais direta: Substituição por Índice

Como você está estudando as estruturas de dados no Python, vale a pena conhecer uma abordagem que atinge exatamente o mesmo resultado, mas de forma mais direta e performática.

Em Python, quando já sabemos o índice (a posição) de um elemento em uma lista, podemos alterar o valor desse elemento diretamente usando o operador de atribuição (=), sem a necessidade de remover e inserir um novo elemento em duas etapas separadas.

Veja como o miolo do seu código if ficaria utilizando essa técnica:

lista = ['carlos', 'maria', 'pedro', 'joana']
print(f'Lista original {lista}')

incorreto = input('Digite o nome incorreto: ')

if incorreto in lista:
    correto = input('Digite o nome correto: ')
    
    # 1. Descobrimos a posição do nome incorreto
    posicao = lista.index(incorreto)
    
    # 2. Substituímos o valor diretamente naquela posição da memória
    lista[posicao] = correto
    
    print(f'O nome {incorreto}, foi substituído por {correto}')
    print(f'Lista atualizada: {lista}')
else:
    print('Nome não encontrado.')

Por que a atribuição direta é uma boa prática?

Por trás dos panos, quando você usa os métodos .remove() e .insert(), o Python precisa fazer um esforço extra na memória: ele remove o item, reorganiza todas as posições seguintes da lista e, depois, empurra todo mundo de novo para abrir espaço para o .insert().

Ao usar a atribuição direta lista[posicao] = correto, o Python apenas substitui o valor que está guardado naquela "caixinha" específica da memória, mantendo todos os outros elementos intactos e intocados. Em listas gigantescas (como o cadastro de todos os atletas de uma maratona nacional, por exemplo), essa pequena diferença de abordagem economiza bastante processamento.

Parabéns pela excelente estrutura do desafio e por compartilhar sua solução com a comunidade do fórum!

Espero que possa ter lhe ajudado!