Módulo 10 - Listas em Python
Verificando se um item existe: in, count e index
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Perguntar se um item está na lista com o operador in.
- Usar not in para agir quando o item NÃO está lá.
- Contar quantas vezes um valor aparece com count().
- Descobrir a posição de um valor com index() e conhecer o risco dele.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Verificando se um item existe: in, count e index.
Os objetivos desta aula. Perguntar se um item está na lista com o operador in. Usar not in para agir quando o item NÃO está lá. Contar quantas vezes um valor aparece com count(). Descobrir a posição de um valor com index() e conhecer o risco dele.
Veja o essencial, parte por parte.
in e not in: a pergunta de uma palavra. O operador in pergunta se o valor está na lista e devolve True ou False: "café" in compras.
Contando com count() e localizando com index(). O in responde SE o valor existe; às vezes a pergunta é QUANTAS vezes.
Decisões com listas: o if encontra o in. Login: se o usuário digitado está na lista de cadastrados, segue; senão, oferece criar conta.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
in e not in: a pergunta de uma palavra
Está na lista? Essa pergunta minúscula sustenta uma quantidade enorme de programas: o produto está no carrinho, o nome está entre os convidados, o e-mail já foi cadastrado. Em Python, ela se escreve quase como se fala: "café" in compras. O resultado é um bool dos bons e velhos módulos 4 e 6: True se o valor estiver lá, False se não. E como devolve bool, o in se encaixa direto no if, sem cerimônia.
compras = ["arroz", "feijão", "café"]
print("café" in compras) # Saída: True
print("banana" in compras) # Saída: False
print("banana" not in compras) # Saída: Truein responde True ou False. O not in inverte: verdadeiro quando o item está ausente.
O not in merece um parágrafo próprio, porque iniciante costuma escrever a negação do jeito torto: not ("banana" in compras), com parênteses e tudo. Funciona, mas o Python tem a forma dedicada, que lê como inglês: "banana" not in compras. Use-a sempre que a ação acontecer na AUSÊNCIA do item: avisar que o produto não foi encontrado, adicionar um nome só se ainda não estiver na lista, cobrar um ingrediente que falta.
Contando com count() e localizando com index()
O in responde SE o valor existe; às vezes a pergunta é QUANTAS vezes. Numa lista de votos, quantos foram para a Ana? Numa lista de notas, quantos alunos tiraram 10? O método count responde: votos.count("Ana"). Se o valor não aparece nenhuma vez, ele devolve 0, sem drama e sem erro, o que o torna seguro de chamar a qualquer momento.
votos = ["Ana", "Bruno", "Ana", "Carla", "Ana"]
print(votos.count("Ana")) # Saída: 3
print(votos.count("Bruno")) # Saída: 1
print(votos.count("Diego")) # Saída: 0 (não existe, e tudo bem)count() conta as ocorrências do valor. Zero ocorrências devolve 0, nunca erro.
Já o index responde ONDE: a posição da PRIMEIRA ocorrência do valor. votos.index("Bruno") devolve 1, o índice dele. É a ponte entre o mundo dos valores e o mundo dos índices, útil quando você precisa da posição para alterar ou combinar com pop. Mas atenção ao contrato dele: se o valor não existir, o index não devolve -1 nem None; ele levanta ValueError, o mesmo erro do remove da aula 4. A defesa é a mesma de lá: pergunte com in antes de chamar.
votos = ["Ana", "Bruno", "Ana"]
print(votos.index("Bruno")) # Saída: 1
print(votos.index("Ana")) # Saída: 0 (a PRIMEIRA Ana)
# votos.index("Diego") -> ValueError: 'Diego' is not in list
if "Diego" in votos:
print(votos.index("Diego"))
else:
print("Diego não recebeu votos.")
# Saída: Diego não recebeu votos.index() aponta a primeira ocorrência. Para valores que podem faltar, o in na frente evita o ValueError.
| Pergunta | Ferramenta | Se o valor não existe |
|---|---|---|
| O valor está na lista? | valor in lista | Devolve False, sem erro |
| Quantas vezes aparece? | lista.count(valor) | Devolve 0, sem erro |
| Em que posição está? | lista.index(valor) | ValueError: confira com in antes |
As três perguntas sobre existência e as três respostas. Só o index é arisco; os outros dois nunca quebram.
Decisões com listas: o if encontra o in
A combinação if + in é onde este módulo encontra o módulo 7 e o programa começa a parecer gente grande. Pense num caixa de mercado em código: se o produto está no carrinho, remove; senão, avisa que não foi encontrado. Ou num cadastro que não aceita nome repetido: só adiciona se o nome not in lista. São duas linhas de lógica que separam um programa frágil, que quebra com ValueError, de um programa educado, que conversa com o usuário.
carrinho = ["arroz", "feijão", "café"]
produto = input("Qual produto deseja tirar do carrinho? ")
if produto in carrinho:
carrinho.remove(produto)
print(f"{produto} removido! Restam {len(carrinho)} itens.")
else:
print(f"{produto} não está no carrinho.")
# Digitando café: café removido! Restam 2 itens.
# Digitando pizza: pizza não está no carrinho.if + in blindando o remove: o programa responde bem tanto ao item que existe quanto ao que não existe.
Faça o inventário do módulo até aqui: criar listas, acessar e alterar por índice, adicionar com append e insert, remover com remove, pop e del, percorrer com for e enumerate, somar e comparar, e agora conferir existência, contar e localizar. É exatamente o conjunto de peças de um gerenciador de itens de verdade. A próxima aula não ensina peça nova: ela monta todas essas numa lista de compras interativa com menu, o programa mais completo do curso até agora. Respire e vem.
Teste rápido
Qual código adiciona um nome à lista SOMENTE se ele ainda não estiver lá?
Perguntas frequentes
- O in funciona com números e outros tipos, ou só com textos?
- Funciona com qualquer tipo de item: 10 in notas, True in respostas, tudo vale. A comparação é de igualdade, a mesma do ==. Detalhe curioso: 10 in [10.0] é True, porque para o Python 10 e 10.0 são iguais em valor.
- O in diferencia maiúsculas de minúsculas?
- Diferencia: "Café" e "café" são textos diferentes. O costume em programas com input é padronizar tudo para minúsculas com lower() na hora de guardar E na hora de procurar. Assim o usuário pode digitar como quiser que o programa encontra.
- Como o in se compara a procurar com um for e um if?
- Fazem a mesma coisa: o in é, por dentro, uma varredura da lista item a item. A diferença é que o in faz isso em uma palavra, sem variável de apoio nem loop escrito à mão. Saber a versão manual ajuda a entender; no código do dia a dia, use o in.
- index() acha a segunda ocorrência de um valor?
- Direto, não: ele sempre devolve a primeira. Mas aceita um segundo argumento dizendo de onde começar a busca: votos.index("Ana", 1) procura a partir do índice 1, o que permite pular a primeira ocorrência. Neste curso você não vai precisar; fica de repertório.
- Por que count() devolve 0 mas index() dá erro para valor ausente?
- Pelo contrato de cada um: zero ocorrências é uma resposta válida para quantas vezes aparece, mas não existe posição honesta para algo que não está lá. Devolver um número falso, como -1, criaria bugs silenciosos, e o Python prefere o erro claro. Por isso a dupla in + index é tão comum.
- O in também funciona em textos e em outras coleções?
- Funciona: "gato" in "o gato subiu" é True (busca de trecho em texto, que você viu no módulo 12), e o in também vale para as tuplas, dicionários e conjuntos do módulo 11. É um dos operadores mais reaproveitáveis do Python; o investimento desta aula rende em tudo que vem pela frente.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.