Introdução
Bem-vindo a este laboratório sobre Conjuntos (Sets) em Python! Python fornece vários tipos de dados nativos para organizar dados, incluindo listas, dicionários, tuplas e conjuntos (sets).
De acordo com a documentação oficial do Python, um conjunto é uma coleção não ordenada sem elementos duplicados. Seus usos principais são para teste de pertinência (membership testing) e eliminação de entradas duplicadas.
Neste laboratório, você explorará como criar, manipular e usar conjuntos de forma eficaz através de uma série de exercícios práticos.
Inicializando um Conjunto (Set)
Nesta etapa, você aprenderá as duas maneiras principais de criar conjuntos (sets) em Python: usando chaves {} e a função embutida set(). É crucial entender que usar chaves vazias {} cria um dicionário vazio, e não um conjunto vazio.
Nota: Se você não está familiarizado com o uso do WebIDE (semelhante ao VS Code), aprenda primeiro neste laboratório.
Primeiro, abra o arquivo step1.py no explorador de arquivos à esquerda.
Agora, copie e cole o seguinte código em step1.py. Este código demonstra como criar conjuntos e destaca o caso especial da criação de um conjunto vazio.
## Create set using curly braces or set() function
s_braces = {1, 2, 3}
print(f"Set with braces: {s_braces}, type: {type(s_braces)}")
s_func = set([1, 2, 3])
print(f"Set with function: {s_func}, type: {type(s_func)}")
## Warning: empty {} creates a dictionary, not a set
s_dict = {}
print(f"Empty braces create a: {type(s_dict)}")
## To create an empty set, you must use set()
s_empty = set()
print(f"To create an empty set use set(): {type(s_empty)}")
Salve o arquivo e, em seguida, execute-o no terminal executando o seguinte comando:
python3 step1.py
Você deverá ver a seguinte saída, que confirma os tipos dos objetos criados. Observe que {} resulta em <class 'dict'>.
Set with braces: {1, 2, 3}, type: <class 'set'>
Set with function: {1, 2, 3}, type: <class 'set'>
Empty braces create a: <class 'dict'>
To create an empty set use set(): <class 'set'>
Compreendendo as Propriedades dos Conjuntos (Sets)
Nesta etapa, você explorará as propriedades centrais dos conjuntos (sets). Os conjuntos são poderosos porque impõem automaticamente a unicidade e são não ordenados. Isso significa que um conjunto removerá automaticamente quaisquer valores duplicados, e você não pode acessar seus elementos usando um índice.
Abra o arquivo step2.py.
Copie e cole o seguinte código em step2.py. A primeira parte do código demonstra como as duplicatas são tratadas, e a segunda parte mostra o que acontece quando você tenta indexar um conjunto.
## Sets automatically remove duplicates
s_duplicates = {1, 2, 3, 2, 3, 4}
print(f"Original with duplicates: {{1, 2, 3, 2, 3, 4}}")
print(f"Set with duplicates removed: {s_duplicates}")
## Sets are unordered and cannot be indexed
print("\nAttempting to access a set by index...")
try:
s = {1, 2, 3}
s[0]
except TypeError as e:
print(f"Error when indexing: {e}")
Agora, execute o script no terminal:
python3 step2.py
A saída será:
Original with duplicates: {1, 2, 3, 2, 3, 4}
Set with duplicates removed: {1, 2, 3, 4}
Attempting to access a set by index...
Error when indexing: 'set' object is not subscriptable
Como você pode ver, os duplicados 2 e 3 foram removidos automaticamente. A tentativa de acessar s[0] resultou em um TypeError, confirmando que os conjuntos não suportam indexação (subscripting).
Adicionando e Atualizando Elementos
Nesta etapa, você aprenderá como adicionar novos elementos a um conjunto existente. Python fornece dois métodos principais para isso: add() para adicionar um único elemento e update() para adicionar múltiplos elementos de um iterável (como uma lista ou outro conjunto).
Abra o arquivo step3.py.
Copie e cole o seguinte código em step3.py. Este código primeiro criará um conjunto, depois adicionará um único elemento e, finalmente, o atualizará com múltiplos elementos.
## Start with a set
s = {1, 2, 3}
print(f"Original set: {s}")
## add() method: add a single element
s.add(4)
print(f"After adding 4: {s}")
## update() method: add multiple elements from an iterable
s.update([2, 3, 4, 5, 6]) ## Duplicates like 2, 3, 4 are ignored
print(f"After updating with [2, 3, 4, 5, 6]: {s}")
Execute o script no terminal:
python3 step3.py
Sua saída deve ser assim. Observe que ao usar update(), quaisquer elementos que já estejam no conjunto são simplesmente ignorados.
Original set: {1, 2, 3}
After adding 4: {1, 2, 3, 4}
After updating with [2, 3, 4, 5, 6]: {1, 2, 3, 4, 5, 6}
Removendo e Descartando Elementos
Nesta etapa, você aprenderá duas maneiras de remover elementos de um conjunto: remove() e discard(). Embora ambos os métodos removam um elemento, eles se comportam de maneira diferente quando o elemento não é encontrado. remove() levantará um KeyError, o que pode travar seu programa se não for tratado, enquanto discard() não fará nada e continuará silenciosamente.
Abra o arquivo step4.py.
Copie e cole o seguinte código, que demonstra o comportamento de ambos os métodos.
## remove() method: raises KeyError if element is not found
s = {1, 2, 3}
print(f"Original set: {s}")
s.remove(3)
print(f"After removing 3: {s}")
## Trying to remove an element that doesn't exist with remove()
try:
s.remove(3)
except KeyError as e:
print(f"Error when removing 3 again: KeyError: {e}")
## discard() method: does not raise an error if element is not found
s = {1, 2, 3}
print(f"\nNew original set: {s}")
s.discard(3)
print(f"After discarding 3: {s}")
s.discard(3) ## No error is raised
print(f"After discarding 3 again (no error): {s}")
Execute o script no terminal:
python3 step4.py
A saída mostra claramente a diferença:
Original set: {1, 2, 3}
After removing 3: {1, 2}
Error when removing 3 again: KeyError: 3
New original set: {1, 2, 3}
After discarding 3: {1, 2}
After discarding 3 again (no error): {1, 2}
A escolha entre remove() e discard() depende se você deseja que seu programa falhe explicitamente quando um elemento estiver ausente ou se deseja lidar com sua ausência de forma graciosa.
Operações de Conjunto (Set Operations)
Nesta etapa final, você praticará as operações de conjunto mais comuns. Essas operações permitem combinar e comparar conjuntos de maneiras poderosas. Você usará tanto a sintaxe de método (ex: s1.union(s2)) quanto a sintaxe de operador (ex: s1 | s2).
- União (
union()ou|): Cria um novo conjunto com todos os elementos dos conjuntos fornecidos. - Interseção (
intersection()ou&): Retorna um novo conjunto contendo apenas os elementos que são comuns a todos os conjuntos. - Diferença (
difference()ou-): Retorna um novo conjunto com os elementos que estão no primeiro conjunto, mas não no segundo. - Diferença Simétrica (
symmetric_difference()ou^): Retorna um novo conjunto com os elementos que estão em um ou outro conjunto, mas não em ambos.
Abra o arquivo step5.py.
Copie e cole o seguinte código para realizar essas quatro operações em dois conjuntos de exemplo.
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print(f"s1 = {s1}")
print(f"s2 = {s2}\n")
## union() or |
## Returns a new set containing all items from both sets.
print(f"Union (s1 | s2): {s1.union(s2)}")
## intersection() or &
## Returns a new set containing items common to both sets.
s3 = {3, 4, 5}
print(f"Intersection (s1 & s2): {s1.intersection(s2)}")
## difference() or -
## Returns a new set containing items in the first set but not in the second.
print(f"Difference (s1 - s2): {s1.difference(s2)}")
print(f"Difference (s2 - s1): {s2.difference(s1)}")
## symmetric_difference() or ^
## Returns a new set with elements in either set, but not both.
print(f"Symmetric Difference (s1 ^ s2): {s1.symmetric_difference(s2)}")
Execute o script no terminal:
python3 step5.py
Examine a saída para entender o resultado de cada operação:
s1 = {1, 2, 3}
s2 = {2, 3, 4}
Union (s1 | s2): {1, 2, 3, 4}
Intersection (s1 & s2): {2, 3}
Difference (s1 - s2): {1}
Difference (s2 - s1): {4}
Symmetric Difference (s1 ^ s2): {1, 4}
Resumo
Neste laboratório, você aprendeu os fundamentos dos conjuntos (sets) em Python. Você começou inicializando conjuntos usando tanto chaves {} quanto a função set(), notando a distinção importante para a criação de conjuntos vazios. Você explorou as propriedades centrais dos conjuntos: eles são não ordenados e armazenam apenas elementos únicos. Você praticou a modificação de conjuntos adicionando elementos com add() e update(), e removendo-os com os métodos remove() e discard(), compreendendo a principal diferença entre eles. Finalmente, você realizou operações essenciais de conjunto, incluindo união (|), interseção (&), diferença (-) e diferença simétrica (^). Agora você tem uma base sólida para usar conjuntos para gerenciar coleções de itens únicos em seus programas Python.



