Trilha de aprendizado · Nível 3 · Tutorial 7

Eliminar duplicatas e comparar grupos com conjuntos

Usar conjuntos para representar valores únicos e comparar grupos, distinguindo situações em que listas, tuplas ou dicionários são mais adequados.

  • Nível: Iniciante
  • Duração: 19 min
  • 8 passos
Eliminar duplicatas e comparar grupos com conjuntos

O que você vai percorrer

  1. Representar valores únicos com conjuntos Crie conjuntos vazios ou preenchidos e reconheça seus elementos válidos e a ausência de acesso por posição. 2 min
  2. Eliminar duplicatas de uma sequência Converta listas ou tuplas em conjuntos e confira os valores únicos sem depender da ordem de exibição. 2 min
  3. Adicionar e descartar elementos Atualize conjuntos com add e discard e diferencie o conteúdo alterado do retorno desses métodos. 2 min
  4. Reunir grupos e encontrar elementos comuns Use união e interseção para descobrir quem participa de pelo menos um grupo e quem participa dos dois. 2 min
  5. Encontrar elementos exclusivos Use a diferença e a diferença simétrica para identificar quem está somente em um grupo ou em exatamente um dos dois. 3 min
  6. Verificar se um grupo está contido em outro Use issubset para verificar a inclusão de um grupo inteiro e interprete a direção da consulta. 2 min
  7. Escolher a coleção adequada Escolha entre lista, tupla, dicionário e conjunto considerando acesso, ordem, repetições e alterações. 2 min
  8. Aplicar conjuntos à comparação de inscrições Compare inscrições de duas oficinas no seu Python 3 e confira os resultados sem depender da ordem de exibição. 4 min

O que você vai aprender

  • Criar conjuntos vazios ou preenchidos e eliminar valores repetidos de uma sequência.
  • Adicionar e descartar elementos de um conjunto.
  • Encontrar elementos comuns, exclusivos ou presentes em qualquer um de dois grupos.
  • Reconhecer que conjuntos não oferecem acesso por posição nem preservação garantida da ordem de percurso.
  • Escolher entre listas, tuplas, dicionários e conjuntos considerando a organização exigida pelos dados.

Antes de começar

  • Consultar e atualizar dados com dicionários

Passo 1 de 8

Representar valores únicos com conjuntos

Crie conjuntos vazios ou preenchidos e reconheça seus elementos válidos e a ausência de acesso por posição.

Um grupo de valores únicos

Um conjunto (set) reúne valores únicos: cada valor aparece uma única vez. Para criar um conjunto preenchido, escreva os elementos separados por vírgulas entre chaves, sem pares chave:valor.

Pense em pertencimento ao grupo, não em posições: conjuntos não permitem acesso por índice nem por fatia.

Um conjunto de cores

python
cores = {"azul", "verde", "amarelo"}
Um oval contém três elementos espalhados: azul, verde e amarelo. Não há posições numeradas ou indicação de primeiro elemento.

Os três valores pertencem ao conjunto cores. A posição no desenho não representa um índice.

Existe um primeiro elemento?

Depois de criar cores = {"azul", "verde", "amarelo"}, podemos usar cores[0] para consultar "azul".

Vazio e elementos válidos

Para criar um conjunto vazio, use set(). As chaves vazias, {}, criam um dicionário.

Textos e números são exemplos de elementos aceitos em conjuntos.

Criações válidas

python
participantes = set()             # conjunto vazio
nomes = {"Ana", "Bia"}            # conjunto de textos
codigos = {10, 20, 30}            # conjunto de números
cadastro = {}                    # dicionário vazio

Atenção

Nem tudo pode ser um elemento

Listas e dicionários não podem ser elementos de um conjunto. Por exemplo, {[10, 20]} tenta guardar uma lista como elemento e causa TypeError. {{"nome": "Ana"}} também causa TypeError, pois tenta guardar um dicionário como elemento.

Escolha as duas criações

Você precisa criar um conjunto vazio chamado grupo e um conjunto com os números 10 e 20 chamado codigos. Qual alternativa atende aos dois requisitos?

Passo 2 de 8

Eliminar duplicatas de uma sequência

Converta listas ou tuplas em conjuntos e confira os valores únicos sem depender da ordem de exibição.

Das ocorrências aos valores únicos

Use set(sequencia) para criar um conjunto com os valores distintos de uma lista ou tupla. Cada valor aparece apenas uma vez no resultado, mesmo que se repita na sequência.

Por exemplo, set(["Ana", "Bia", "Ana", "Caio", "Bia"]) contém apenas Ana, Bia e Caio. Com uma tupla, funciona do mesmo jeito: set(("Ana", "Bia", "Ana")) contém apenas Ana e Bia.

Cinco cartões em sequência mostram Ana, Bia, Ana, Caio e Bia. Uma seta leva a um círculo com apenas três cartões: Caio, Ana e Bia, espalhados sem posições numeradas.

Cinco ocorrências viram três valores únicos. A disposição no círculo não representa uma ordem do conjunto.

Complete a conversão

Complete com o nome que cria o conjunto:

nomes = ["Ana", "Bia", "Ana", "Caio", "Bia"]
unicos = ____(nomes)

Confira sem depender da ordem

Você pode conferir o resultado com len e in. A conversão cria um novo conjunto e não altera a lista original. Se executar este código no seu Python, confira os nomes presentes, não a posição em que aparecem.

python
nomes = ["Ana", "Bia", "Ana", "Caio", "Bia"]
unicos = set(nomes)

print(unicos)           # Contém Ana, Bia e Caio; a ordem não é garantida
print(len(unicos))      # 3
print("Bia" in unicos)  # True
print(len(nomes))       # 5: a lista original continua intacta

Atenção

O que o conjunto deixa de representar

O conjunto não registra quantas vezes cada nome apareceu e não garante a preservação da ordem original nem da ordem de inserção. Mesmo que uma impressão pareça seguir essa ordem, não conte com isso. Se precisar das ocorrências ou da sequência original, mantenha a lista; o conjunto não a substitui.

O que é possível garantir?

Após grupo = set(["Ivo", "Lia", "Ivo", "Ivo"]), qual afirmação é garantida?

Passo 3 de 8

Adicionar e descartar elementos

Atualize conjuntos com add e discard e diferencie o conteúdo alterado do retorno desses métodos.

Entrar e sair do conjunto

add(elemento) inclui um elemento no conjunto. Se ele já estiver presente, nada muda.

discard(elemento) descarta um elemento. Se ele estiver ausente, nada muda e não ocorre erro.

Acompanhe as alterações

python
grupo = {"Ana"}
grupo.add("Bia")       # Agora contém Ana e Bia
grupo.add("Bia")       # Continua com Ana e Bia
grupo.discard("Ana")   # Agora contém apenas Bia
grupo.discard("Caio")  # Continua com Bia, sem erro
Cinco estados do conjunto: Ana; Ana e Bia após adicionar Bia; Ana e Bia após repetir a inclusão; Bia após descartar Ana; Bia após tentar descartar Caio, que estava ausente.

Adicionar Bia novamente não cria uma cópia. Descartar Caio, ausente, não altera o grupo.

Complete as chamadas

Incluir

O conjunto cores já existe. Complete apenas com o nome do método para incluir "azul":

cores.___("azul")

Descartar

Complete apenas com o nome do método para descartar "verde", sem erro caso esteja ausente:

cores.___("verde")

Alteração não é retorno

add e discard alteram o próprio conjunto e retornam None, não o conjunto atualizado. Isso também vale quando a chamada não muda o conteúdo.

Conteúdo e retorno são diferentes

python
grupo = {"Ana"}
retorno = grupo.add("Bia")
print(grupo)    # Contém Ana e Bia, em qualquer ordem
print(retorno)  # None

retorno = grupo.discard("Caio")
print(grupo)    # Ainda contém Ana e Bia
print(retorno)  # None

Atenção

Não substitua o conjunto pelo retorno

Evite grupo = grupo.add("Bia"): depois da chamada, grupo passará a valer None. Para atualizar e continuar usando o conjunto, escreva apenas grupo.add("Bia"). O mesmo cuidado vale para discard.

Preveja o estado final

Acompanhe as chamadas sem depender da ordem dos elementos.

python
cores = {"azul", "verde"}
cores.add("azul")
cores.discard("vermelho")
retorno = cores.discard("verde")

Ao final, quais são os valores de cores e retorno?

Passo 4 de 8

Reunir grupos e encontrar elementos comuns

Use união e interseção para descobrir quem participa de pelo menos um grupo e quem participa dos dois.

Reunir todos ou selecionar os comuns?

Considere dois grupos: A tem Ana e Bia; B tem Bia e Caio.

  • União, A | B: reúne quem está em pelo menos um dos grupos, incluindo quem está nos dois.
  • Interseção, A & B: seleciona somente quem está nos dois grupos.

As duas operações produzem novos conjuntos, sem alterar A ou B.

Dois diagramas com círculos A e B sobrepostos. Ana está apenas em A, Bia na sobreposição e Caio apenas em B. Na união, toda a área dos círculos está destacada; na interseção, somente a sobreposição.

Bia aparece uma única vez na união e é a única participante da interseção.

Duas perguntas, duas operações

Confira os elementos, não a ordem em que aparecem. Os comentários mostram resultados possíveis.

python
A = {"Ana", "Bia"}
B = {"Bia", "Caio"}

reunidos = A | B
comuns = A & B

print(reunidos)  # {'Ana', 'Bia', 'Caio'}
print(comuns)    # {'Bia'}
print(A)         # {'Ana', 'Bia'}
print(B)         # {'Bia', 'Caio'}

Associe cada pergunta ao resultado

Use A = {'Ana', 'Bia'} e B = {'Bia', 'Caio'}. Associe cada pergunta à resposta.

Toque em um item e depois no par correspondente.

Quando ninguém está nos dois

Se os grupos não têm elementos em comum, a interseção é um conjunto vazio. Isso é um resultado válido, não um erro.

python
C = {"Lia"}
D = {"Rui"}

print(C | D)  # {'Lia', 'Rui'}
print(C & D)  # set()

Atenção

| e & não são or e and

Para calcular união e interseção entre conjuntos, use | e &. Os operadores or e and avaliam o valor lógico dos operandos e retornam um deles; não comparam seus elementos.

Como C e D não estão vazios, C or D retorna C, e C and D retorna D — não a união nem a interseção.

Escolha a operação certa

Com C = {'Lia'} e D = {'Rui'}, qual alternativa responde corretamente a “quem participa dos dois grupos”?

Passo 5 de 8

Encontrar elementos exclusivos

Use a diferença e a diferença simétrica para identificar quem está somente em um grupo ou em exatamente um dos dois.

Somente no primeiro grupo

A diferença tem direção

Para encontrar quem está em A, mas não em B, use A - B. O conjunto à esquerda é o ponto de partida: ficam apenas seus elementos que não pertencem ao conjunto à direita.

Ao inverter para B - A, a pergunta muda: quem está em B, mas não em A?

Mesmos grupos, resultados diferentes

Confira os resultados pelos elementos, independentemente da ordem em que aparecem.

python
A = {"Ana", "Bia", "Caio"}
B = {"Bia", "Davi"}

print(A - B)  # Contém Ana e Caio
print(B - A)  # Contém apenas Davi

Dica

Os grupos originais continuam iguais

A operação - produz um novo conjunto. Ela não remove elementos de A nem de B.

Preveja a inversão

Considere A = {"Ana", "Bia", "Caio"} e B = {"Bia", "Davi"}. Qual comparação entre A - B e B - A está correta?

Em exatamente um dos grupos

Diferença simétrica: A ^ B

Se a pergunta é quem está em exatamente um dos dois grupos, use A ^ B. A diferença simétrica inclui os exclusivos de ambos os lados e deixa de fora quem está nos dois.

Diferentemente de -, inverter os operandos de ^ não muda os elementos do resultado. Essa operação também produz um novo conjunto, sem alterar os originais.

Compare as regiões selecionadas

Três diagramas dos mesmos conjuntos A e B. A contém Ana, Bia e Caio; B contém Bia e Davi. Em A - B, somente a região de Ana e Caio está destacada. Em B - A, somente a região de Davi está destacada. Em A ^ B, as duas regiões exclusivas estão destacadas. Bia, na interseção, fica sem destaque nos três.

Da esquerda para a direita: somente A, somente B e exatamente um dos dois. A região compartilhada fica fora dos três resultados.

Os exclusivos dos dois lados

Usando os mesmos conjuntos A e B da primeira tela:

python
exclusivos = A ^ B
print(exclusivos)  # Contém Ana, Caio e Davi
print(B ^ A)       # Contém os mesmos elementos

Escolha pela pergunta

A representa os inscritos em pintura e B, os inscritos em música. Relacione cada pergunta à expressão adequada.

Toque em um item e depois no par correspondente.

Passo 6 de 8

Verificar se um grupo está contido em outro

Use issubset para verificar a inclusão de um grupo inteiro e interprete a direção da consulta.

Todos os elementos estão no outro grupo?

Um conjunto A é subconjunto de B quando todos os elementos de A também pertencem a B.

A.issubset(B) responde a essa pergunta com True ou False. A direção importa: leia como “A está contido em B?”. Basta um elemento de A faltar em B para a resposta ser False.

À esquerda, A contém Ana e Bia e está totalmente dentro de B, que também contém Caio. À direita, A contém Ana e Davi, mas Davi está fora de B: a contenção falha.

À esquerda, A está contido em B. À direita, Davi impede essa relação.

Inverter a consulta pode mudar a resposta

python
A = {"Ana", "Bia"}
B = {"Ana", "Bia", "Caio"}

print(A.issubset(B))  # True
print(B.issubset(A))  # False: Caio não está em A

Um elemento faz diferença

Considere A = {2, 5} e B = {2, 3, 4}.

A chamada A.issubset(B) retorna True porque o número 2 aparece nos dois conjuntos.

Mesmos elementos também contam

Um conjunto não precisa ter menos elementos para ser subconjunto de outro. Se os dois têm os mesmos elementos, issubset retorna True nas duas direções.

Use in para consultar um elemento e issubset para verificar um grupo inteiro.

Um nome ou o grupo inteiro?

python
A = {"Ana", "Bia"}
B = {"Bia", "Ana"}

print("Ana" in B)        # True: consulta um elemento
print(A.issubset(B))     # True: consulta todos de A
print(B.issubset(A))     # True: os elementos são os mesmos

Dica

Na chamada A.issubset(B), comece pelo conjunto antes do ponto: cada elemento dele precisa estar no conjunto entre parênteses.

Preveja as três respostas

Considere:
A = {"Ana", "Bia"}
B = {"Bia", "Ana"}
C = {"Ana", "Bia", "Caio"}

Quais são os resultados, nesta ordem?

  1. A.issubset(B)
  2. C.issubset(A)
  3. A.issubset(C)

Passo 7 de 8

Escolher a coleção adequada

Escolha entre lista, tupla, dicionário e conjunto considerando acesso, ordem, repetições e alterações.

O requisito decide

Antes de escolher, pergunte: preciso acessar por posição ou chave? A ordem importa? Preciso guardar ocorrências repetidas? A estrutura deve aceitar alterações?

  • Lista: sequência alterável que mantém ordem e pode guardar repetições.
  • Tupla: sequência com posições e ordem, cuja estrutura deve permanecer fixa; também pode ter repetições.
  • Dicionário: associa chaves a valores e preserva a ordem de inserção; o acesso é por chave, não por posição.
  • Conjunto: guarda valores únicos e permite verificar pertencimento e comparar grupos, sem acesso posicional nem ordem garantida.

Quatro organizações diferentes

Lista: sequência com posições e uma ocorrência repetida, com espaço para alteração. Tupla: sequência com posições em uma moldura fixa. Dicionário: chaves ligadas a valores. Conjunto: elementos distintos espalhados dentro de um contorno, sem posições.

Escolha pela organização necessária, não apenas pelos valores que serão guardados.

Associe a necessidade

Associe cada situação à coleção mais adequada.

Toque em um item e depois no par correspondente.

Quando eliminar repetições atrapalha

Um histórico recebe o nome de cada visitante conforme ele chega. A mesma pessoa pode voltar, e é necessário manter todas as visitas na ordem de chegada.

Qual coleção você escolheria? Explique por que substituir esse histórico por um conjunto não atenderia ao requisito.

Escreva pelo menos 30 caracteres (0/30).

Passo 8 de 8

Aplicar conjuntos à comparação de inscrições

Compare inscrições de duas oficinas no seu Python 3 e confira os resultados sem depender da ordem de exibição.

Prepare e atualize as inscrições

Duas oficinas, inscrições repetidas

Você precisa comparar os participantes de fotografia e desenho, contando cada pessoa apenas uma vez em cada oficina.

No seu computador, crie um arquivo chamado oficinas.py e copie o código abaixo. Ele mantém as listas originais e cria os conjuntos para comparação.

Antes de comparar, aplique duas alterações em fotografia: Eva entrou e Caio cancelou. Neste exemplo, cada nome identifica uma pessoa diferente.

Dados e atualizações

python
inscricoes_fotografia = ["Ana", "Bia", "Ana", "Caio"]
inscricoes_desenho = ["Bia", "Davi", "Davi", "Eva"]

fotografia = set(inscricoes_fotografia)
desenho = set(inscricoes_desenho)

fotografia.add("Eva")
fotografia.discard("Caio")

print("Fotografia:", fotografia, "Quantidade:", len(fotografia))
print("Desenho:", desenho, "Quantidade:", len(desenho))

Da inscrição ao participante único

Antes das atualizações: a lista de fotografia tem Ana, Bia, Ana e Caio, mas seu conjunto tem Ana, Bia e Caio. A lista de desenho tem Bia, Davi, Davi e Eva, mas seu conjunto tem Bia, Davi e Eva.

A conversão elimina repetições no conjunto. Depois, o código aplica a entrada de Eva e o cancelamento de Caio em fotografia.

Execute a comparação

Responda com operações de conjuntos

Acrescente este bloco ao final do mesmo arquivo e execute oficinas.py com seu Python 3.

Confira quem está em qualquer oficina, nas duas, somente em fotografia e em exatamente uma delas. Por fim, verifique se todos os participantes de fotografia também estão em desenho.

Compare os nomes e as quantidades: a ordem impressa dos conjuntos não faz parte do resultado esperado.

Quatro operações e uma consulta

python
qualquer_oficina = fotografia | desenho
ambas = fotografia & desenho
somente_fotografia = fotografia - desenho
exatamente_uma = fotografia ^ desenho
fotografia_contida = fotografia.issubset(desenho)

print("Qualquer oficina:", qualquer_oficina)
print("Quantidade:", len(qualquer_oficina))

print("Nas duas:", ambas)
print("Quantidade:", len(ambas))

print("Somente fotografia:", somente_fotografia)
print("Quantidade:", len(somente_fotografia))

print("Exatamente uma:", exatamente_uma)
print("Quantidade:", len(exatamente_uma))

print("Fotografia está contida em desenho?", fotografia_contida)

Confira e justifique

O que apareceu no seu computador?

Relate os elementos e as quantidades dos dois grupos após as atualizações e dos quatro resultados. Informe também o resultado de issubset e identifique quem explica esse resultado.

Escreva pelo menos 60 caracteres (0/60).

Por que manter duas representações?

Por que conjuntos são adequados para esta comparação? Se fosse necessário consultar a ordem original e quantas vezes cada nome foi inscrito, por que você precisaria das listas originais?

Escreva pelo menos 40 caracteres (0/40).

Leve o critério para outros problemas

Resumo

Revisão final

Escolha a coleção pela informação que precisa preservar.

  • Conjuntos representam valores únicos, sem índices ou ordem de percurso garantida. Use set() para o vazio; {} cria um dicionário. Textos e números podem ser elementos; listas e dicionários, não.
  • set(sequencia) reúne os valores distintos. add inclui um elemento e discard o descarta sem erro se estiver ausente; ambos alteram o conjunto e retornam None.
  • | reúne os grupos; & encontra os elementos comuns; A - B encontra somente os de A; ^ reúne os exclusivos de cada lado. Essas operações produzem novos conjuntos. issubset verifica se um grupo inteiro está contido no outro.
  • Use listas para sequências alteráveis com ordem e repetições; tuplas para sequências de estrutura fixa; dicionários para associar chaves a valores; conjuntos para valores únicos e comparação de grupos.

Eliminar duplicatas e comparar grupos com conjuntos

Parabéns! Você concluiu: Eliminar duplicatas e comparar grupos com conjuntos

Tutorial concluído! Você praticou a comparação de inscrições com conjuntos e a escolha de outra coleção quando ordem, posições ou repetições precisam ser preservadas.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso