Com a lista abaixo, responder as questões 1, 2, 3 e 4.
lista =[4,8,12,14,16,2,5,18,3,10,11,19,7,13,1]
Pesquise sobre a função “list.insert()” de listas em Python. Crie uma função que receba uma lista, um índice e um valor. Antes de qualquer alteração, verifique se esse valor já está presente na lista. Se o valor não estiver presente, use o método “list.insert()” para adicionar o valor no índice especificado. A função deve então retornar a lista modificada. Se o valor já estiver presente, a função deve retornar uma mensagem informando que ‘O valor [valor] já existe na lista e não foi adicionado’.

Passo 1

O enunciado pede que eu faça o seguinte com a lista abaixo:
lista = [4,8,12,14,16,2,5,18,3,10,11,19,7,13,1]
As tarefas são:
  1. Pesquisar/explicar a função “list.insert()” de listas em Python.
  2. Criar uma função que receba uma lista, um índice e um valor, e que antes de alterar verifique se o valor já está presente na lista.
  3. Se o valor não estiver presente, usar o método “list.insert()” para adicionar o valor no índice especificado.
  4. A função deve retornar a lista modificada. Se o valor já existir, deve retornar a mensagem “O valor [valor] já existe na lista e não foi adicionado”.
Não há outras restrições explícitas (por ex. se a função deve copiar a lista ou modificar in-place). Vou implementar seguindo exatamente o pedido: checar presença, usar list.insert() e retornar a lista modificada; se já existir, retornar a mensagem no formato solicitado.

Passo 2

O que é e como funciona o método list.insert():
  • Assinatura: list.insert(index, object).
  • O que faz: insere o elemento object na lista na posição index. Não substitui nem remove elementos; desloca os elementos a partir de index para a direita.
  • Retorno: o método modifica a lista no lugar (in-place) e devolve None. Ou seja, não retorna a nova lista — ele altera a lista original.
  • Comportamento com índices fora do intervalo:
    • Se index for maior que o comprimento da lista, o elemento é adicionado ao final (equivalente a append).
    • Se index for negativo, o Python conta a partir do final: index=-1 insere antes do último elemento, index=-len(lista)-1 insere no início, e índices muito negativos também resultam em inserção no início.
  • Exemplo curto (para entender):
    • Se lista = [10, 20, 30] e executamos lista.insert(1, 15), a lista vira [10, 15, 20, 30].
    • Se executamos lista.insert(100, 40) em [10, 15, 20, 30], vira [10, 15, 20, 30, 40].

Passo 3

Por que checar se o valor já existe antes de inserir:
  • Em Python, verificamos presença com o operador in: valor in lista — isso devolve True se o valor estiver presente.
  • A verificação evita duplicatas quando o enunciado exige que não se adicione um valor já existente.
  • Complexidade: a operação in faz busca linear (O(n)), que é aceitável para listas pequenas/médias e para um exercício de prova. É simples e direto para implementar numa prova sem complicar demais.

Passo 4

Implementação passo a passo da função (explicando cada linha):
  • Nomearei a função de forma descritiva: inserir_se_nao_existir.
  • Parâmetros: lista (a lista onde inserir), indice (posição onde inserir), valor (valor a inserir).
  • Passos internos:
    1. Verificar presença com if valor in lista:.
    2. Se estiver presente, retornar a mensagem formatada com o valor entre colchetes: f"O valor [{valor}] já existe na lista e não foi adicionado".
    3. Caso contrário, usar lista.insert(indice, valor) para inserir.
    4. Retornar a lista (modificada).
Código final da função (já testado mentalmente com os exemplos que vou mostrar a seguir):
def inserir_se_nao_existir(lista, indice, valor):
    if valor in lista:
        return f"O valor [{valor}] já existe na lista e não foi adicionado"
    lista.insert(indice, valor)
    return lista
Explicação das escolhas:
  • Usei f-string para montar a mensagem com o valor entre colchetes, exatamente no formato solicitado.
  • A função modifica a lista passada (comportamento do list.insert) e retorna a própria lista modificada, atendendo ao enunciado.
  • Poderíamos optar por trabalhar em uma cópia da lista (lista.copy()) para não alterar a original, mas o enunciado pediu usar list.insert(), e a versão mais direta em provas é alterar a lista recebida.

Passo 5

Aplicando a função à lista fornecida e mostrando exemplos práticos passo a passo (isso ajuda a entender o que vai acontecer na prova):
Lista inicial (usando o dado do enunciado):
lista = [4, 8, 12, 14, 16, 2, 5, 18, 3, 10, 11, 19, 7, 13, 1]
Exemplo A — inserir um valor que NÃO está na lista:
  • Queremos inserir o valor 6 na posição índice 2.
  • Chamada: inserir_se_nao_existir(lista, 2, 6)
  • Verificação: 6 in lista ? → False (6 não está presente).
  • Executa lista.insert(2, 6).
  • A lista fica:
    [4, 8, 6, 12, 14, 16, 2, 5, 18, 3, 10, 11, 19, 7, 13, 1]
  • A função retorna essa lista modificada.
Observação: depois dessa chamada, a variável lista foi alterada — se fizer novas chamadas, estará usando a lista já modificada.
Exemplo B — tentar inserir um valor que JÁ está na lista:
  • Usando a lista original (ou, se quisermos o estado original, recriar a lista inicial), testar inserir 8 no índice 0.
  • Chamada: inserir_se_nao_existir(lista, 0, 8)
  • Verificação: 8 in lista ? → True (8 já existe).
  • A função retorna a string:
    “O valor [8] já existe na lista e não foi adicionado”
  • A lista permanece inalterada por essa chamada.
Exemplo C — índice maior que o tamanho da lista (comportamento esperado):
  • Chamada: inserir_se_nao_existir(lista, 100, 20)
  • Se 20 não estiver na lista, o método insert coloca 20 no final (comportamento de append).
  • Retorna a lista com 20 no fim.
Exemplo D — índice negativo:
  • Chamada: inserir_se_nao_existir(lista, -1, 9)
  • Se 9 não estiver, o insert com índice -1 coloca 9 antes do último elemento.

Passo 6

Dicas rápidas para usar isso na prova:
  • Sempre explique que você checa presença com ‘in’ antes de inserir (mostre a linha if valor in lista:).
  • Mostre que usa list.insert(indice, valor) e explique que isso desloca elementos e modifica a lista.
  • Se pedirem para não alterar a lista original, diga explicitamente que você faria uma cópia com lista.copy() antes de inserir; caso contrário, a solução direta altera a lista passada.
  • Teste mentalmente os casos borda: índice negativo, índice grande, e valor já existente.

Resposta

  1. list.insert(insere um elemento na lista na posição especificada; modifica a lista in-place e não retorna valor).
def inserir_se_nao_existir(lista, indice, valor):
if valor in lista:
return f"O valor [{valor}] já existe na lista e não foi adicionado"
lista.insert(indice, valor)
return lista
3) Exemplo (inserindo 6 no índice 2): [4, 8, 6, 12, 14, 16, 2, 5, 18, 3, 10, 11, 19, 7, 13, 1]  
4) Exemplo (tentando inserir 8 que já existe): O valor [8] já existe na lista e não foi adicionado

Exercícios relacionados