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)) # 3Adicionando 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)) # FalseO 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)) # Truefrozenset
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: retornaTruese o elementoxestiver no conjunto.x not in s: retornaTruese o elementoxnão estiver no conjunto.s.issubset(t): verifica sesé subconjunto det.s.issuperset(t): verifica sescontémt.s.union(t): retorna a união dos conjuntosset.s.intersection(t): retorna a interseção dos conjuntosset.s.difference(t): retorna a diferença entre os conjuntosset.s.copy(): retorna uma cópia do conjunto.
Documentação oficial