Conjuntos em Python (set): valores únicos, operações e usos
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Imagine que você é professor e está fazendo a chamada. Um aluno assina a lista de presença duas vezes sem querer. Isso quer dizer que ele está na aula duas vezes? Claro que não. O que importa é quem veio, não quantas vezes a pessoa escreveu o nome.
Um conjunto em Python (set) funciona do mesmo jeito. É uma coleção que remove duplicatas automaticamente. Cada item de um conjunto é único. Os conjuntos também não se importam com a ordem: o que importa é se um item faz parte ou não.
Neste tutorial, você vai aprender a criar conjuntos, fazer operações poderosas como união e interseção, alterar conjuntos com métodos e descobrir quando os conjuntos são a ferramenta perfeita para o trabalho.
Como criar um conjunto em Python
Você cria um conjunto colocando os itens entre chaves {}, separados por vírgulas. Se você incluir valores repetidos, o Python os ignora sem avisar.
{'apple', 'banana', 'cherry'}
{'red', 'green', 'blue'}Repare que a ordem na saída pode ser diferente da que você digitou. Os conjuntos não têm ordem, então o Python pode guardar os itens internamente em qualquer disposição. Não conte com um conjunto para manter uma ordem específica.
Você também pode criar um conjunto a partir de uma lista usando o construtor set(). Essa é uma forma muito usada de remover duplicatas de uma lista.
{'Bob', 'Alice', 'Charlie'}
{'o', 'l', 'e', 'h'}Operações com conjuntos: união, interseção e diferença
O verdadeiro poder dos conjuntos está nas operações de conjuntos. Com elas, você combina e compara conjuntos e encontra as diferenças entre eles. Pense nos diagramas de Venn das aulas de matemática.
União: junte tudo
A união retorna todos os itens dos dois conjuntos, sem duplicatas. Você pode usar o operador | ou o método .union().
{'Charlie', 'Bob', 'Alice', 'Diana'}
{'Charlie', 'Bob', 'Alice', 'Diana'}Interseção: encontre o que há em comum
A interseção retorna apenas os itens que aparecem nos dois conjuntos. Use o operador & ou .intersection().
{'Bob', 'Charlie'}Diferença: o que só existe em um conjunto
A diferença retorna os itens que estão no primeiro conjunto, mas não no segundo. Use o operador - ou .difference(). Aqui a ordem importa.
{'Alice'}
{'Diana'}Diferença simétrica: itens em um, mas não nos dois
A diferença simétrica retorna os itens que estão em um ou outro conjunto, mas não nos dois. Pense nela como o oposto da interseção. Use o operador ^ ou .symmetric_difference().
{'Alice', 'Diana'}Como adicionar e remover itens de um conjunto
Os conjuntos são mutáveis, ou seja, você pode adicionar e remover itens depois de criá-los. Estes são os principais métodos que você vai usar.
{'apple', 'banana', 'cherry'}
{'date', 'elderberry', 'apple', 'banana', 'cherry'}
{'date', 'elderberry', 'apple', 'cherry'}
{'date', 'elderberry', 'apple', 'cherry'}Você também pode apagar todos os itens ou retirar um item qualquer do conjunto (você não escolhe qual).
Removed: 50
Remaining: {20, 40, 10, 30}
set()Por que os conjuntos são tão rápidos para testar se um item faz parte deles
Um dos melhores motivos para usar um conjunto é verificar se algo existe. A palavra-chave in funciona tanto com listas quanto com conjuntos, mas os conjuntos são muito mais rápidos.
bob is allowed! eve is not on the list.
O que são frozensets?
Um frozenset é uma versão imutável de um conjunto. Depois de criado, não dá para adicionar nem remover itens. Isso torna os frozensets hashable (é possível calcular um hash deles), o que significa que eles podem ser usados como chaves de dicionário ou guardados dentro de outros conjuntos.
frozenset({'u', 'o', 'i', 'e', 'a'})
frozenset({'u', 'o', 'i', 'f', 'g', 'd', 'e', 'b', 'c', 'a'})Quando usar um conjunto em vez de uma lista?
Conjuntos e listas resolvem problemas diferentes. Uma regra prática: se você se importa com a ordem ou com as duplicatas, use uma lista. Se você se importa com valores únicos ou buscas rápidas, use um conjunto.
# Order matters
playlist = ['song1', 'song2', 'song3']
# Duplicates are meaningful
die_rolls = [3, 5, 3, 2, 5, 6]
# You need index access
first = playlist[0]# Only unique items matter
tags = {'python', 'coding', 'tutorial'}
# Fast membership checks
if 'python' in tags:
print('Found!')
# Removing duplicates
unique = set([1, 2, 2, 3, 3])Exercícios práticos
Você tem uma lista de endereços de e-mail em que alguns aparecem mais de uma vez. Crie um conjunto chamado unique_emails a partir da lista emails e exiba-o em ordem alfabética usando sorted().
O que este código exibe? Pense com cuidado em como os conjuntos lidam com duplicatas e no que a função len() retorna.
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = set(data)
print(len(unique))Escreva uma instrução print() com a saída exata.
Você tem dois conjuntos: math e english. Encontre e exiba os alunos matriculados nas duas turmas. Exiba o resultado como uma lista ordenada.
Este código tenta criar um conjunto vazio, adicionar itens a ele e exibir o resultado. Mas há um bug: quem escreveu o código usou {} para criar um conjunto vazio. Corrija o bug para que o código funcione.
Você tem um conjunto recipe com todos os ingredientes necessários e um conjunto pantry com o que você já tem na despensa. Encontre os ingredientes que você ainda precisa comprar e exiba-os como uma lista ordenada.
Escreva uma função chamada dedupe(items) que remove as duplicatas de uma lista mantendo a ordem original. Use um conjunto para registrar quais itens você já viu. Retorne a lista sem duplicatas.
Teste a função chamando print(dedupe([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])).