Objetivo Geral
- Entender o funcionamento da estrutura de dados
set.
Pré-requisitos
- Python 3
- VSCode
Etapa 1: Criação e acesso aos dados
Um set é uma coleção que não possui objetos repetidos. Usamos sets para representar conjuntos matemáticos ou eliminar itens duplicados de um iterável.
Criando sets
set([1, 2, 3, 1, 3, 4]) # {1, 2, 3, 4}
set("abacaxi") # {"b", "a", "c", "x", "i"}
set(("palio", "gol", "celta", "palio")) # {"gol", "celta", "palio"}Conjuntos em Python não suportam indexação e nem fatiamento. Caso queira acessar os seus valores, é necessário converter o conjunto para lista.
Acessando os dados
numeros = {1, 2, 3, 2}
numeros = list(numeros)
print(numeros[0])A forma mais comum para percorrer os dados de um conjunto é utilizando o comando for.
Iterar conjuntos
carros = {"gol", "celta", "palio"}
for carro in carros:
print(carro)Às vezes é necessário saber qual o índice do objeto dentro do laço for. Para isso podemos usar a função enumerate.
Função enumerate
carros = {"gol", "celta", "palio"}
for indice, carro in enumerate(carros):
print(f"{indice}: {carro}")Etapa 2: Métodos da classe set
.union
conjunto_a = {1, 2}
conjunto_b = {3, 4}
conjunto_a.union(conjunto_b) # {1, 2, 3, 4}.intersection
conjunto_a = {1, 2, 3}
conjunto_b = {2, 3, 4}
conjunto_a.intersection(conjunto_b) # {2, 3}.difference
conjunto_a = {1, 2, 3}
conjunto_b = {2, 3, 4}
conjunto_a.difference(conjunto_b) # {1}
conjunto_b.difference(conjunto_a) # {4}.symmetric_difference
conjunto_a = {1, 2, 3}
conjunto_b = {2, 3, 4}
conjunto_a.symmetric_difference(conjunto_b) # {1, 4}.issubset
conjunto_a = {1, 2, 3}
conjunto_b = {4, 1, 2, 5, 6, 3}
conjunto_a.issubset(conjunto_b) # True
conjunto_b.issubset(conjunto_a) # False
# todos os elementos de a estão presentes em b?.issuperset
conjunto_a = {1, 2, 3}
conjunto_b = {4, 1, 2, 5, 6, 3}
conjunto_a.issuperset(conjunto_b) # False
conjunto_b.issuperset(conjunto_a) # True
# todos os elementos de b estão presentes em a?.isdisjoint
conjunto_a = {1, 2, 3, 4, 5}
conjunto_b = {6, 7, 8, 9}
conjunto_c = {1, 0}
conjunto_a.isdisjoint(conjunto_b) # True
conjunto_a.isdisjoint(conjunto_c) # False
# conjuntos disjuntos ocorrem quando não existe intersecção.add
sorteio = {1, 23}
sorteio.add(25) # {1, 23, 25}
sorteio.add(42) # {1, 23, 25, 42}
sorteio.add(25) # {1, 23, 25, 42}.clear
sorteio = {1, 23}
sorteio # {1,23}
sorteio.clear()
sorteio # {}.copy
sorteio = {1, 23}
sorteio # {1, 23}
sorteio.copy()
sorteio # {1, 23}.discard
numeros = {1, 2, 3, 1, 2, 4, 5, 5, 6, 7, 8, 9, 0}
numeros # {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
numeros.discard(1)
numeros.discard(45)
numeros # {2, 3, 4, 5, 6, 7, 8, 9, 0}.pop
numeros = {1, 2, 3, 1, 2, 4, 5, 5, 6, 7, 8, 9, 0}
numeros # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
numeros.pop() # 0
numeros.pop() # 1
numeros # {2, 3, 4, 5, 6, 7, 8, 9}.remove
numeros = {1, 2, 3, 1, 2, 4, 5, 5, 6, 7, 8, 9, 0}
numeros # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
numeros.remove(0) # 0
numeros # {1, 2, 3, 4, 5, 6, 7, 8, 9}len
numeros = {1, 2, 3, 1, 2, 4, 5, 5, 6, 7, 8, 9, 0}
len(numeros) # 10in
numeros = {1, 2, 3, 1, 2, 4, 5, 5, 6, 7, 8, 9, 0}
1 in numeros # True
10 in numeros # FalseAtividade Prática
Com base nos conhecimentos adquiridos, realize as seguintes tarefas:
- Criação: Crie um conjunto chamado
frutascontendo 5 nomes de frutas, sendo que uma delas deve ser inserida duas vezes (para testar o comportamento do set). - Manipulação: Utilize o método
.add()para adicionar uma nova fruta ao conjunto e o método.discard()para remover uma fruta existente. - Operações de Conjuntos: Crie dois conjuntos:
conjunto_a = {1, 2, 3}econjunto_b = {3, 4, 5}. Realize a união, intersecção e diferença entre eles, imprimindo os resultados. - Verificação: Verifique se o elemento
3está presente noconjunto_autilizando o operadorin.