Módulo 7 - Conjuntos: tem ou não tem, sem repetir

Pertence ou não pertence: a pergunta do conjunto

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Fazer o teste de pertencimento: verificar se um item está no conjunto.
  • Aplicar o conjunto em listas de permissão e de bloqueio.
  • Entender por que o teste no conjunto é mais rápido que varrer uma lista.
  • Usar o conjunto para detectar duplicados enquanto percorre dados.

A pergunta central

Se o conjunto tivesse uma só habilidade, seria esta: responder se um item pertence ao grupo. Toda vez que um sistema decide aceitar ou barrar algo com base numa lista, é um teste de pertencimento acontecendo. O aplicativo confere se o seu e-mail está na lista de quem já se cadastrou. A portaria confere se o carro está na lista de autorizados. O filtro de palavrões confere se o termo digitado está no conjunto de palavras proibidas. A pergunta é sempre a mesma, pertence ou não pertence, e o conjunto foi feito para respondê-la com elegância. Você escreve algo como se item pertence ao conjunto então, e o programa decide o caminho.

bloqueados <- { "spam@x.com", "bot@y.com" }
email <- "maria@site.com"
se email pertence a bloqueados então
  escreva("Acesso negado")
senão
  escreva("Bem-vindo")
fim
// maria não está no conjunto de bloqueados: mostra Bem-vindo

O teste de pertencimento decide o caminho. Uma lista de bloqueio é um conjunto consultado com pertence.

Um círculo de conjunto com três itens dentro. Duas setas de teste apontam para o círculo: uma, de um item que está dentro, acende verde com a etiqueta pertence; outra, de um item que está fora, acende vermelho com a etiqueta não pertence. Nenhuma das setas percorre os itens um a um.
O teste responde direto se o item está dentro ou fora do conjunto, sem examinar os demais.

Por que o conjunto responde tão rápido

Você poderia fazer o teste de pertencimento com uma lista: percorrer item por item procurando o alvo. Funciona, mas fica lento conforme a lista cresce, porque no pior caso você varre tudo. O conjunto usa a mesma mágica de bastidor do dicionário: ele guarda os itens de um jeito que permite ir direto verificar a presença, sem examinar os outros. Por isso o teste no conjunto é quase instantâneo e quase não desacelera com o tamanho, checar num conjunto de dez ou de dez milhões custa praticamente o mesmo. É a mesma vantagem que você viu no dicionário, e pela mesma razão: os dois evitam a varredura. Quando o seu programa precisa checar presença muitas vezes, trocar a lista por um conjunto costuma ser a diferença entre rápido e travado.

🎮 Jogo da aula

Pertence ou não?

Considere o conjunto permitidos com os valores 12, 45 e 7. Decida se cada afirmação é verdadeira ou falsa.

Detectar duplicados enquanto percorre

Um uso muito prático do teste de pertencimento é achar repetidos numa sequência de dados. A ideia é manter um conjunto de já vistos e, ao percorrer os itens, para cada um perguntar: você já está no conjunto de vistos? Se sim, é um duplicado; se não, adicione-o aos vistos e siga. Assim você detecta o primeiro CPF repetido num cadastro, a primeira palavra que se repete num texto, o primeiro número que aparece duas vezes numa lista, tudo numa passada só. Compare com a alternativa sem conjunto: para cada item, você teria que varrer todos os anteriores procurando igual, o que é bem mais lento. O conjunto de vistos transforma essa busca cara numa checagem rápida a cada passo.

numeros <- [3, 8, 3, 5]
vistos <- conjunto vazio
para cada n em numeros faça
  se n pertence a vistos então
    escreva("Repetido: ", n)
  senão
    adicione(n, vistos)
  fim
fim
// ao chegar no segundo 3, ele já está em vistos: mostra Repetido: 3

O conjunto de vistos guarda o que já passou. Ao reencontrar um item, o teste de pertencimento acusa o duplicado.

Teste rápido

Um sistema precisa checar milhões de vezes se um e-mail está numa lista de bloqueados. Por que um conjunto vence uma lista aqui?

Perguntas frequentes

O que é o teste de pertencimento?
É perguntar se um item está no conjunto, com resposta sim ou não. É a operação principal do conjunto e a base de listas de permissão e bloqueio, verificação de duplicados e controle de quem já fez algo. Você escreve algo como se item pertence ao conjunto e o programa decide o caminho.
Por que o teste no conjunto é mais rápido que na lista?
Porque o conjunto guarda os itens de um jeito que permite verificar a presença direto, sem examinar os outros. A lista, quando não sabe a posição, precisa varrer item por item. Por isso o conjunto responde ao pertence quase instantaneamente, mesmo com milhões de elementos, enquanto a lista fica lenta.
Qual a diferença entre lista de permissão e lista de bloqueio?
A lista de permissão guarda o que é aceito: só quem pertence pode entrar. A de bloqueio guarda o que é barrado: quem pertence é rejeitado. As duas usam o teste de pertencimento; muda só a decisão tomada com o resultado. Conjuntos são a estrutura natural para ambas.
Como detecto duplicados com um conjunto?
Mantendo um conjunto de já vistos. Ao percorrer os itens, para cada um você testa se já está em vistos: se sim, é duplicado; se não, adiciona e segue. Isso encontra repetidos numa passada só, muito mais rápido que comparar cada item com todos os anteriores.
Posso usar dicionário no lugar do conjunto para checar presença?
Pode, usando as chaves de um dicionário e ignorando os valores, e o desempenho é parecido. Mas o conjunto expressa melhor a intenção quando você só quer saber se algo pertence, sem um valor associado. Use conjunto para presença pura; dicionário quando cada item leva a um dado.
Checar presença num conjunto muda o conjunto?
Não. O teste de pertencimento só consulta, não altera. Ele responde se o item está lá e pronto. Adicionar é que muda o conjunto (e só se o item for novo). Consultar é uma operação de leitura, segura de repetir quantas vezes quiser.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.