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.