Conjuntos Python

Python vem equipado com vários tipos de dados integrados para nos ajudar a organizar nossos dados. Essas estruturas incluem listas, dicionários, tuplas e conjuntos (sets).

Da documentação do Python 3 documentação

Um conjunto é uma coleção não ordenada sem elementos duplicados. Usos básicos incluem teste de pertinência e eliminação de entradas duplicadas.

Leia Python Sets: What, Why and How para uma referência mais aprofundada.

Inicializando um conjunto

Existem duas maneiras de criar conjuntos: usando chaves {} e a função integrada set()

Conjuntos Vazios

Ao criar um conjunto, certifique-se de não usar chaves vazias {} ou você obterá um dicionário vazio em vez disso.

# Create set using curly braces or set() function
s = {1, 2, 3}  # Using curly braces
s = set([1, 2, 3])  # Using set() constructor

# Warning: empty {} creates a dictionary, not a set
s = {}  # this will create a dictionary instead of a set
type(s)  # Returns <class 'dict'>
<class 'dict'>

Coleções não ordenadas de elementos únicos

Um conjunto remove automaticamente todos os valores duplicados.

# Sets automatically remove duplicates
s = {1, 2, 3, 2, 3, 4}  # Duplicates are removed
s  # Returns {1, 2, 3, 4}
{1, 2, 3, 4}
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

What happens when you create a set with duplicate values?
A. Duplicates are automatically removed
B. An error is raised
C. The set keeps all duplicates
D. Only the first occurrence is kept

E como um tipo de dado não ordenado, eles não podem ser indexados.

s = {1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

set add e update

Usando o método add() podemos adicionar um único elemento ao conjunto.

# add() method: add a single element to the set
s = {1, 2, 3}
s.add(4)  # Add element 4
s
{1, 2, 3, 4}

E com update(), múltiplos:

# update() method: add multiple elements from an iterable
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6])  # Add multiple elements (duplicates ignored)
s
{1, 2, 3, 4, 5, 6}

set remove e discard

Ambos os métodos removerão um elemento do conjunto, mas remove() levantará um key error se o valor não existir.

# remove() method: remove element, raises KeyError if not found
s = {1, 2, 3}
s.remove(3)  # Remove element 3
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

discard() não levantará erros.

# discard() method: remove element, no error if not found
s = {1, 2, 3}
s.discard(3)  # Remove element 3 (safe, no error if missing)
s
{1, 2}
s.discard(3)
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

What is the difference between remove() and discard() methods for sets?
A. remove() removes one element, discard() removes all
B. There is no difference
C. remove() raises an error if element doesn't exist, discard() does not
D. remove() is faster

set union

union() ou | criará um novo conjunto com todos os elementos dos conjuntos fornecidos.

# union(): combine all elements from multiple sets (no duplicates)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2)  # or 's1 | s2' - returns {1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

set intersection

intersection() ou & retornará um conjunto com apenas os elementos que são comuns a todos eles.

# intersection(): return elements common to all sets
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3)  # or 's1 & s2 & s3' - returns {3}
{3}
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

What does intersection() return for sets?
A. All elements from all sets
B. Only elements that are common to all sets
C. Elements in the first set but not in others
D. Elements in either set but not both

set difference

difference() ou - retornará apenas os elementos que são exclusivos do primeiro conjunto (conjunto invocado).

# difference(): return elements in first set but not in others
s1 = {1, 2, 3}
s2 = {2, 3, 4}

s1.difference(s2)  # or 's1 - s2' - returns {1}
{1}
s2.difference(s1) # or 's2 - s1'
{4}

set symmetric_difference

symmetric_difference() ou ^ retornará todos os elementos que não são comuns entre eles.

# symmetric_difference(): return elements in either set, but not both
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2)  # or 's1 ^ s2' - returns {1, 4}
{1, 4}
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

What does symmetric_difference() return for two sets?
A. All elements from both sets
B. Only elements common to both sets
C. Elements in the first set but not in the second
D. Elements in either set, but not in both