Conjuntos em Python
Os conjuntos (set) em Python representam um tipo de coleção que armazena apenas elementos únicos. Para definir um conjunto, utilizam-se chaves, nas quais os elementos são listados:
users = {"Tom", "Tom", "Alice", "Tom"}
print(users) # {'Tom', 'Alice'}
Note que, mesmo que o elemento "Tom" esteja presente três vezes na definição do conjunto, a função print
o exibe apenas uma vez. Isso ocorre porque os conjuntos contêm apenas valores únicos.
Também é possível criar um conjunto usando a função set()
, passando uma lista ou tupla de elementos:
people = ["Tom", "Tom", "Alice", "Tom"]
users = set(people)
print(users) # {'Tom', 'Alice'}
A função set
é útil para criar um conjunto vazio:
Obtendo o tamanho de um conjunto
A função embutida len()
retorna o número de elementos em um conjunto:
users = {"Tom", "Bob", "Alice"}
print(len(users)) # 3
Adicionando elementos
Para adicionar um único elemento, utiliza-se o método add()
:
users = set()
users.add("John")
print(users) # {'John'}
Para adicionar vários elementos, utiliza-se o método update()
:
users = set()
users.update(["Tom", "Alice", "Bob"])
print(users) # {'Tom', 'Alice', 'Bob'}
Removendo elementos
Para remover um elemento, utiliza-se o método remove()
: se o elemento não estiver presente, uma exceção será lançada. Portanto, recomenda-se verificar a existência do elemento antes de removê-lo:
users = {"Tom", "Bob", "Alice"}
user = "Tom"
if user in users:
users.remove(user)
print(users) # {"Bob", "Alice"}
Outra forma de remover um elemento sem lançar um erro, caso ele não esteja presente, é utilizando o método discard()
:
users = {"Tom", "Bob", "Alice"}
users.discard("Jonhy") # "Jonhy" não está presente, método não faz nada
print(users) # {"Tom", "Bob", "Alice"}
users.discard("Tom") # "Tom" está presente, método o remove
print(users) # {"Bob", "Alice"}
Para remover todos os elementos, utiliza-se o método clear()
:
users.clear()
Iterando sobre um Conjunto
Para percorrer os elementos de um conjunto, pode-se usar o loop for
:
users = {"Tom", "Bob", "Alice"}
for user in users:
print(user)
Nesse caso, a saída será:
Tom Bob Alice
Operações com Conjuntos
O método copy()
permite copiar o conteúdo de um conjunto para outra variável:
users = {"Tom", "Bob", "Alice"}
students = users.copy()
print(students) # {"Tom", "Bob", "Alice"}
Unindo Conjuntos
O método union()
une dois conjuntos e retorna um novo conjunto:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users3 = users.union(users2)
print(users3) # {"Bob", "Alice", "Sam", "Kate", "Tom"}
Outra forma de unir conjuntos é com o operador de barra vertical [ | ]
:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users3 = users | users2
print(users3) # {"Bob", "Alice", "Sam", "Kate", "Tom"}
Interseção de Conjuntos
O método intersection()
retorna um novo conjunto contendo apenas os elementos presentes em ambos os conjuntos:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users3 = users.intersection(users2)
print(users3) # {"Bob"}
O operador &
pode ser utilizada para o mesmo propósito:
print(users & users2) # {"Bob"}
O método intersection_update()
modifica o conjunto original com os elementos resultantes da interseção:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users.intersection_update(users2)
print(users) # {"Bob"}
Diferença de Conjuntos
O método difference()
retorna um novo conjunto contendo os elementos presentes no primeiro conjunto, mas não no segundo. Isso também pode ser feito com o operador de subtração -
:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users3 = users.difference(users2)
print(users3) # {"Tom", "Alice"}
print(users - users2) # {"Tom", "Alice"}
Diferença Simétrica
A diferença simétrica retorna todos os elementos dos dois conjuntos, exceto os que estão em ambos. Pode ser feita com o método symmetric_difference()
ou o operador ^
:
users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users3 = users.symmetric_difference(users2)
print(users3) # {"Tom", "Alice", "Sam", "Kate"}
users4 = users ^ users2
print(users4) # {"Tom", "Alice", "Sam", "Kate"}
Relações entre Conjuntos
O método issubset()
verifica se um conjunto é subconjunto de outro:
users = {"Tom", "Alice", "Bob"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
print(users.issubset(superusers)) # True
print(superusers.issubset(users)) # False
O método issuperset()
retorna True se o conjunto atual contiver todos os elementos de outro conjunto:
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
print(users.issuperset(superusers)) # False
print(superusers.issuperset(users)) # True
frozenset
O tipo frozenset
é uma variação dos conjuntos que não pode ser modificado. Para criá-lo, utiliza-se a função frozenset()
:
users = frozenset({"Tom", "Bob", "Alice"})
Os frozensets são imutáveis e, portanto, suportam um conjunto limitado de operações, como:
len(s)
: retorna o tamanho do conjunto.x in s
: retornaTrue
se o elementox
estiver no conjunto.x not in s
: retornaTrue
se o elementox
não estiver no conjunto.s.issubset(t)
: verifica ses
é subconjunto det
.s.issuperset(t)
: verifica ses
contémt
.s.union(t)
: retorna a união dos conjuntoss
et
.s.intersection(t)
: retorna a interseção dos conjuntoss
et
.s.difference(t)
: retorna a diferença entre os conjuntoss
et
.s.copy()
: retorna uma cópia do conjunto.
Documentação oficial