Sets (conjuntos)
Os sets são a última estrutura para armazenar dados que veremos. Ela se assemelha às listas, tendo como sua principal funcionalidade o fato de não permitir itens duplicados.
Os sets são listas ou coleções não ordenadas de itens únicos.
Criando e acessando dados em Sets
Para criar um set, você pode utilizar a função set()
, que transforma sequências (uma lista, por exemplo) em sets, ou você pode definir os valores do set separados entre vírgulas dentro de chaves ({}
):
lista1 = ["Luiz", "Alfredo", "Felipe", "Alfredo", "Joana", "Carolina", "Carolina"]
set1 = set(lista1)
print(set1)
set2 = {"cachorro", "gato", "papagaio", "cachorro", "papagaio", "macaco", "galinha"}
print(set2)
> {'Felipe', 'Alfredo', 'Joana', 'Carolina', 'Luiz'}
> {'cachorro', 'papagaio', 'gato', 'galinha', 'macaco'}
Como vimos anteriormente, strings em Python também são tratadas como listas. Desta forma, também podemos usar o construtor set()
para criar um set a partir de uma string:
set3 = set("papagaio")
print(set3)
> {'g', 'p', 'i', 'a', 'o'}
Sets são muito usados para remover valores duplicados de listas. A forma usualmente utilizada para isso é a do exemplo abaixo:
lista2 = ["Luiz", "Alfredo", "Felipe", "Alfredo", "Joana", "Carolina", "Carolina"]
lista_sem_duplicatas = list(set(lista2))
print(lista_sem_duplicatas)
> ['Felipe', 'Joana', 'Luiz', 'Alfredo', 'Carolina']
Para adicionar um item em um set, temos a função add()
:
set1.add("Joca")
print(set1)
> {'Joana', 'Alfredo', 'Felipe', 'Luiz', 'Carolina', 'Joca'}
A função update()
, por sua vez, adiciona ao set todos os items de alguma outra estrutura iterável, como uma lista ou tupla:
set1.update(["Rafael", "Pedro", "Alice"])
print(set1)
> {'Rafael', 'Alice', 'Joana', 'Alfredo', 'Felipe', 'Luiz', 'Pedro', 'Carolina', 'Joca'}
Por fim, é possível concatenar dois sets utilizando o operador |
print(set1 | set2)
> {'Rafael', 'macaco', 'Alice', 'cachorro', 'papagaio', 'Joana', 'Alfredo', 'gato', 'Felipe', 'galinha', 'Luiz', 'Pedro', 'Carolina', 'Joca'}
Para remover valores de um set, use a função remove()
:
print(set2)
set2.remove("cachorro")
print(set2)
> {'gato', 'galinha', 'papagaio', 'macaco', 'cachorro'}
> {'gato', 'galinha', 'papagaio', 'macaco'}
Acessar os dados de um set através de um index não é permitido. A única forma é fazer um loop sobre os elementos do set.
Algumas funções para trabalhar com sets
Dentre as funções que também funcionam com sets, estão a função len()
, que retorna a quantidade de itens no mesmo, e o uso do in
para verificar a existência de um item no set:
print(len(set2))
print("gato" in set2)
print("elefante" in set2)
> 4
> True
> False
Além destas, o Python oferece algumas outras funções interessantes para o trabalho com sets. Vejamos alguns exemplos.
difference() e intersection()
As funções difference()
e intersection()
retornam, como o nome já diz, a diferença e a interseção entre dois sets, ou seja, itens que estão em um set e não estão no outro ou itens que estão nos dois sets:
set4 = {"Luiz", "Alfredo", "Joana", "Felipe", "Mauro"}
set5 = {"Joana", "Carolina", "Afonso", "Carlos", "Mauro"}
print(set4.difference(set5))
print(set4.intersection(set5))
> {'Luiz', 'Felipe', 'Alfredo'}
> {'Joana', 'Mauro'}
copy()
Da mesma forma que vimos para listas, para criar uma cópia de um set, deve-se utilizar a função copy()
. Criar um novo set apenas utilizando o sinal de igual faz apenas uma referência. Primeiro, vejamos como uma simples definição com o sinal de igual não resolve:
set_backup = set4
print(set_backup)
set4.clear()
print(set_backup)
> {'Mauro', 'Alfredo', 'Felipe', 'Joana', 'Luiz'}
> set()
Agora, a forma que funciona:
set4 = {"Luiz", "Alfredo", "Joana", "Felipe", "Mauro"}
set_backup = set4.copy()
print(set_backup)
set4.clear()
print(set_backup)
> {'Alfredo', 'Mauro', 'Luiz', 'Joana', 'Felipe'}
> {'Alfredo', 'Mauro', 'Luiz', 'Joana', 'Felipe'}
Conclusão
E assim, terminamos o capítulo sobre sets, e também acabamos com as estruturas utilizadas pelo Python para armazenar dados. Vimos como criar sets e utilizá-los para remover duplicatas de listas. Também vimos como manipulá-los e algumas funções interessantes para se utilizar ao trabalhar com sets. No próximo capítulo falaremos sobre Estruturas de Controle.