Olá Pythonista!
Nesse post vamos falar sobre um dos tipos de dados menos utilizados do Python, mas que tem muita utilidade na programação Python.
Estamos falando dos Sets
!
Sem mais delongas, vamos para o conteúdo!
Vá Direto ao Assunto…
- Introdução
- Dados duplicados
- Adicionando itens
- Acessando itens
- Removendo itens
- Operações matemáticas com sets
- Set Comprehensions ou Compreensão de Sets
Introdução
O Set
é um tipo de dado bastante peculiar do Python que possui as seguintes características:
- Sets são desordenados
- Não possuem elementos duplicados, ou seja, cada elemento é único.
- Um set em si pode ser modificado, contudo os elementos contidos dentro dele precisam ser de tipos imutáveis.
A sintaxe para utilizar sets é bem simples: eles são definidos utilizando-se chaves {}
. Veja um exemplo:
1
{1, 2, 3, 4, 5, 6}
Para confirmar seu tipo:
1
2
3
meu_set = {'python', 'academy'}
print(type(meu_set))
A saída do código acima será:
1
<class 'set'>
Portanto, caso em algum momento você se depare com esse objeto, saiba que ele é um Set
!
Dados duplicados
Como dito na introdução os dados no Sets
não podem ser duplicados.
Vamos ver um exemplo para confirmar:
1
2
3
4
5
lista = [1, 1, 2, 2, 3, 3]
sem_duplicados = set(lista)
print(sem_duplicados)
Observe como os valores duplicados são ignorados:
1
{1, 2, 3}
Adicionando itens
Após a criação de um Set
, você não pode alterar seus itens.
Contudo você pode adicionar novos itens e para isso podemos utilizar o método add()
.
Vamos ver como:
1
2
3
4
5
convidados = {'João', 'Maria', 'Eduarda'}
convidados.add('Marcela')
print(convidados)
A chamada ao método add()
adiciona o elemento ‘Marcela’ ao set:
1
{'Eduarda', 'Maria', 'Marcela', 'João'}
Para adicionar itens de outro conjunto ao set especificado, podemos utilizar o método update()
.
Você pode utilizar esse método com qualquer tipo de objeto iterável (tuplas, listas, dicionários etc.)
1
2
3
4
5
6
7
ids = {10, 12, 13, 14}
novos_ids = {11, 13, 15}
ids.update(novos_ids)
print(ids)
Veja como o set ids
ficou após a chamada ao método update()
:
1
{10, 11, 12, 13, 14, 15}
Acessando itens
Sets não possibilitam acessar seus elementos através de índices (assim como Listas) ou chaves (como os Dicionários).
Veja o que acontece caso tentemos realizar essa operação:
1
2
3
set_1 = {1, 2, 3}
print(set_1[0])
Saída:
1
2
3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
Assim, podemos acessá-los de duas maneiras “brutas”: percorrendo o conjunto ou verificando se o elemento desejado se encontra no set.
Podemos percorrer seus elementos com for
, por exemplo:
1
2
3
4
este_set = {'João', 'Maria', 'Eduarda'}
for item in este_set:
print(item)
Sendo impresso seu conteúdo:
1
2
3
João
Maria
Eduarda
Ou verificando se um elemento existe dentro dele:
1
print('João' in este_set)
Imprimindo True
ou False
, de acordo com o resultado da condição estabelecida.
Poxa, poucas maneiras de acessar os elementos, hein?
Calma, não entre em pânico! Podemos transformar o set em lista para ganharmos as facilidades de manipulação das Listas:
1
2
3
4
lista = list(este_set)
print(lista[0])
print(lista[1])
print(lista[2])
Saída:
1
2
3
João
Maria
Eduarda
Caso você queria saber tudo sobre Listas, vale dar uma olhada no nosso post completo sobre listas!
Removendo itens
Para remover itens de um set, você pode, inicialmente, utilizar dois métodos: o remove()
e discard()
.
Veja como é simples remover elementos com remove()
:
1
2
3
sacola = {'queijo', 'pão', 'leite'}
sacola.remove('queijo')
Para remover com discard()
, faça:
1
2
3
sacola = {'queijo', 'pão', 'leite'}
sacola.discard('queijo')
Ambos terão o mesmo resultado:
1
{'pão', 'leite'}
Caso o item não exista, será gerado um erro do tipo TypeError
!
Você também pode usar o método pop()
, porém no caso do set
ele não removerá o último item (pois o conjunto é desordenado):
1
2
3
4
5
6
compra = {'queijo', 'pão', 'leite'}
item = compra.pop()
print(f"Item removido: {item}")
print(compra)
Ou seja, a saída pode ser um item completamente aleatório:
1
2
Item removido: pão
{'queijo', 'leite'}
Se você deseja esvaziar completamente o set
, utilize o clear()
:
1
2
3
compra = {'queijo', 'pão', 'leite'}
compra.clear()
O que fará com que o set compra
fique vazio ({}
).
Podemos deletá-lo completamente, utilizando a keyword del
do Python, assim:
1
2
3
compra = {'queijo', 'pão', 'leite'}
del compra
Operações matemáticas com sets
Agora é hora de relembrar suas aulas de Matemática!
Muita das vezes você pode pensar que os sets são bem restritos, porém sua utilização para armazenar elementos distintos é incrívelmente útil.
Os Sets em Python nada mais são que Conjuntos Matemáticos. Neles, você também pode aplicar os conceitos de Interseção, União, Diferença e etc.
Interseção
O método intersection()
retorna um novo conjunto contendo apenas os itens presentes em ambos:
1
2
3
4
5
6
7
sacola1 = {'Banana', 'Maça', 'Abacate'}
sacola2 = {'Laranja', 'Pera', 'Maça'}
sacola = sacola1.intersection(sacola2)
print(sacola)
# ou
print(sacola1 & sacola2)
Resultando em:
1
2
{'Maça'}
{'Maça'}
Se você deseja já atualizar um dos sets com a interseção entre eles, use o método intersection_update()
:
1
2
3
4
5
6
sacola1 = {'Banana', 'Maça', 'Abacate'}
sacola2 = {'Laranja', 'Pera', 'Maça'}
sacola1.intersection_update(sacola2)
print(sacola1)
Veja que sacola1
agora possui apenas a interseção entre os sets:
1
{'Maça'}
União
Você pode utilizar o método union()
para retornar um conjunto de elementos contendo elemento de ambos sets:
1
2
3
4
5
6
set1 = {1, 2, 3}
set2 = {'z', 'x', 'a'}
print(set1.union(set2))
# ou
print(set1 | set2)
Resultando na união dos sets em um novo conjunto:
1
2
{'x', 1, 2, 3, 'z', 'a'}
{'x', 1, 2, 3, 'z', 'a'}
Diferença
o método difference()
retorna a diferença, ou seja os valores que existem no set sacola1
, e não no set sacola2
:
1
2
3
4
5
6
sacola1 = {'Banana', 'Maça'}
sacola2 = {'Laranja', 'Pera', 'Maça'}
print(sacola1.difference(sacola2))
# ou
print(sacola1 - sacola2)
Resultando apenas nos itens que estão contidos no set sacola1
:
1
2
{'Banana'}
{'Banana'}
Diferença simétrica
O método symmetric_difference_update()
manterá os elementos que não estão presentes em ambos conjuntos:
1
2
3
4
5
6
sacola1 = {'Banana', 'Maça'}
sacola2 = {'Laranja', 'Pera', 'Maça'}
print(sacola1.symmetric_difference(sacola2))
# ou
print(sacola1 ^ sacola2)
Apenas os dados que não estão presentes em ambos os sets estarão:
1
2
{'Laranja', 'Banana', 'Pera'}
{'Laranja', 'Banana', 'Pera'}
Está curtindo esse conteúdo?
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Set Comprehensions ou Compreensão de Sets
Existe uma forma muito Pythônica de se criar sets, através da técnica chamada Set Comprehensions.
Ele é uma maneira muito concisa de se criar e manipular sets que a Linguagem nos oferece!
Se você quiser saber tudo sobre esse assunto, acesse agora nosso post completo sobre Set Comprehensions AGORA!
Conclusão
Nesse Post vimos do básico ao avançado sobre os Sets do Python!
Se ficou com alguma dúvida, fique à vontade para deixar um comentário no box aqui embaixo! Será um prazer te responder!