Coleções em Python: Sets

Começamos os estudos sobre as coleções na linguagem Python: quais são suas principais características e uso. Tudo com exemplos e questões de concursos. Já iniciamos com o artigo sobre listas e tuplas. Agora, entenderemos como usar os sets. Então, simbora comigo!

Por
6 min. de leitura

Fala, meus consagrados! Tudo beleza com vocês?

Começamos os estudos sobre as coleções na linguagem Python: quais são suas principais características e uso. Tudo com exemplos e questões de concursos.

Já iniciamos com o artigo sobre listas e tuplas. Agora, entenderemos como usar os sets.

Então, simbora comigo!


Visão geral

São quatro as coleções em Python:

  • Lista;
  • Tupla;
  • Set; e
  • Dicionário.

Na tabela 1, temos as principais características dessas coleções.

Característica

Lista

Tupla

Set

Dicionário

Ordenada

Sim

Sim

Não

Sim

Mutável

Sim

Não

Sim

Sim

Indexada

Sim

Sim

Não

Sim

Permite membros repetidos

Sim

Sim

Não

Não


Tabela 1: principais características das coleções em Python.

Observação: a partir da versão Python 3.7, os dicionários são ordenados.

Exemplos:

# Lista []
linguagens = ["Python", "Java", "PHP", "C"]

# Tupla ()
linguagens = ("Python", "Java", "PHP", "C")

# Set {}
linguagens = {"Python", "Java", "PHP", "C"}

# Dicionário {}
optimus = {"id": 1, "nome": "Optimus Prime"}


Sets

São coleções:

  • Não ordenadas;
  • Mutáveis;
  • Não indexadas; e
  • Que não permitem membro repetidos.

Os sets são escritas com chaves { }.

Com uma série de exemplos, vamos entender o uso de sets. Após isso, iremos resolver várias questões que citam essa coleção.

Criando um set

Primeiro ponto é sabermos como criar sets em Python. Podemos criar com o construtor set(), podendo já passar elementos como parâmetros, ou já informando os elementos envoltos em chaves.

Como exemplos, criaremos dois sets com quatro elementos (quatro linguagens de programação):

linguagens1 = set(("Python", "Java", "PHP", "C"))
print(linguagens1) # Pode ser impresso {'C', 'PHP', 'Python', 'Java'}

linguagens2 = {"Python", "Java", "PHP", "C"}
print(linguagens2) # Pode ser impresso {'C', 'PHP', 'Python', 'Java'}

Observação: notem que a ordem dos elementos impressos pode ser diferente da ordem quando criamos um set. Isso porque os sets não são ordenados. Cada vez que o código acima for executado, haverá ordem diferente de impressão.

Um set pode ser criado a partir de outro, ainda usando o construtor set(), passando o set original como parâmetro:

# Set original.
linguagens1 = {"Python", "Java", "PHP", "C"}
print(linguagens1) # Poderá ser impresso {'Java', 'Python', 'C', 'PHP'}

# Set criado a partir de outro.
linguagens2 = set(linguagens1)
print(linguagens2) # Poderá ser impresso {'Java', 'Python', 'C', 'PHP'}

Observação: mesmo que seja informado elementos repetidos na criação de um set, esse set conterá apenas elementos únicos. Os elementos repetidos serão descartados, pois sets não permitem elementos repetidos:

linguagens = {"Python", "Java", "PHP", "C", "Python"}
print(linguagens) # Poderá ser impresso {'Java', 'Python', 'PHP', 'C'}

Vejam que citamos duas vezes a linguagem “Python” na criação do set, mas na sua impressão, o elemento apareceu apenas uma vez.

Imprimindo um set

Para imprimir um set, podemos usar a função print():

linguagens = {"Python", "Java", "PHP", "C"}
print(linguagens) # Poderá ser impresso {'Python', 'PHP', 'Java', 'C'}

Acessando elementos de um set

Não há como acessar um elemento de um set, pois essa coleção não é indexada. Nem podemos acessar um intervalo de elementos de um set, como podemos fazer em uma lista ou tupla.

Ao tentar acessar um elemento de um set, o interpretador exibirá um erro:

linguagens = {"Python", "Java", "PHP", "C"}
print(linguagens[0])

Erro ao executar o código:

Traceback (most recent call last):
  File "./prog.py", line 3, in <module>
TypeError: 'set' object is not subscriptable

Mas pode-se acessar cada elemento utilizando uma estrutura de repetição for:

linguagens = {"Python", "Java", "PHP", "C"{

for x in linguagens:
    print(x)

O que pode ser impresso é (lembrem-se que não há uma ordem certa na impressão de elementos de um set):

PHP
C
Python
Java

Verificando se um elemento está ou não em um set

O operador in também pode ser usado para verificar se um elemento está no set:

linguagens = {"Python", "Java", "PHP", "C"}

if "Python" in linguagens:
    print("Python está no set das linguagens de programação") # Será impresso Python está no set das linguagens de programação

Nesse caso, será impressa a frase porque o elemento “Python” está no set.

Os operadores not in são usados para verificar se um elemento não está na no set:

linguagens = {"Python", "Java", "PHP", "C"}

if "C#" not in linguagens:
    print("C# não está no set das linguagens de programação") # Será impresso C# não está no set das linguagens de programação

Nesse caso, será impressa a frase porque o elemento “C#” não está no set.

Verificando o tamanho de um set

Para retornar o tamanho de um set (quantidade de elementos), utiliza-se a função len():

linguagens = {"Python", "Java", "PHP", "C"}
print(len(linguagens)) # Será impresso 4

Adicionando elementos em um set

Veremos duas formas para adicionar um elemento na lista. Primeiro, usaremos o método add(), informando um elemento como parâmetro:

linguagens = {"Python", "Java", "PHP", "C"}

# Inserindo um elemento no set.
linguagens.add("C#")
print(linguagens) # Poderá ser impresso {'Java', 'C#', 'Python', 'PHP', 'C'}

Ao usar a função add(), ela insere o elemento no set, sem ser em uma posição específica.

Mas podemos inserir vários elementos de uma só vez no set usando o método update(), informando uma lista de elementos:

linguagens = {"Python", "Java", "PHP", "C"}

# Inserindo mais de um elemento no set.
linguagens.update(["Smalltalk", "Javascript"])
print(linguagens) # Poderá ser impresso {'PHP', 'Smalltalk', 'Java', 'C', 'Javascript', 'Python'}

Removendo elementos de um set

Agora, entenderemos formas de remoção de elementos de uma lista. Começando com a remoção de um elemento específico usando o método remove(), informando qual o item a ser excluído da lista:

linguagens = {"Python", "Java", "PHP", "C"}

# Removendo um item específico do set.
linguagens.remove("Java")
print(linguagens) # Poderá ser impresso {'C', 'Python', 'PHP'}

Ao usar o método remove(), os demais elementos da lista serão remanejados, depois do elemento citado ser excluído.

Observação: se o item a ser removido não existir, remove() gerará um erro.

linguagens = {"Python", "Java", "PHP", "C"}

# Removendo um item que não existe no set.
linguagens.remove("C#")
print(linguagens)

O elemento “C#” não existe no set de linguagens, com isso, haverá o erro ao usar o remove():

Traceback (most recent call last):
  File "./prog.py", line 4, in <module>
KeyError: 'C#'

A outra forma de remoção de um elemento no set é usando o método discard(), informando qual o item a ser excluído da lista (assim como o método remove()):

linguagens = {"Python", "Java", "PHP", "C"}

# Removendo um item específico do set.
linguagens.discard("Java")
print(linguagens) # Poderá ser impresso {'Python', 'PHP', 'C'}

Observação: a diferença entre usar o método discard() e usar o método remove() é que, ao usar o discard(), se o item a ser removido não existir, não será gerado um erro, como ocorre com o remove().

linguagens = {"Python", "Java", "PHP", "C"}

# Removendo um item que não existe no set.
linguagens.discard("C#")
print(linguagens) # Poderá ser impresso {'Java', 'PHP', 'C', 'Python'}

O elemento “C#” não existe no set linguagens, com isso, não haverá o erro ao usar o discard().

Mais uma forma de remover um elemento é usando o método pop(). Ao usar esse método, será removido um elemento do set:

linguagens = {"Python", "Java", "PHP", "C"}

# Removendo um elemento do set.
linguagens.pop()
print(linguagens) # Poderá ser impresso {'C', 'Java', 'PHP'}

Observação: como os sets não são ordenados, então, ao usar o método pop(), não se saberá qual item será removido.

Deletando todos os elementos de um set

Podemos excluir todos os itens do set usando o método clear():

linguagens = {"Python", "Java", "PHP", "C"}

linguagens.clear()
print(linguagens) # Será impresso set()

Deletando um set inteiro

A palavra-chave del não pode ser usada para remover um elemento específico de um set, mas podemos usar del para eliminar a coleção inteira:

linguagens = {"Python", "Java", "PHP", "C"}

# Deletando o set inteiro.
del linguagens
print(linguagens)

Como o set foi deletado, então haverá um erro na linha print(linguagens):

Traceback (most recent call last):
  File "./prog.py", line 5, in <module>
NameError: name 'linguagens' is not defined

Copiando um set para outro

Pode-se copiar o conteúdo de um set para outro, usando o método copy():

linguagens = {"Python", "Java", "PHP", "C"}
ling = linguagens.copy()

print(linguagens) # Poderá ser impresso {'Python', 'PHP', 'Java', 'C'}
print(ling) # Poderá ser impresso {'Python', 'PHP', 'Java', 'C'}

Trabalhando com operações de conjuntos

Podemos juntar dois sets em um, usando o método union():

set1 = {"a", "b" , "c", 1}
set2 = {1, 2, 3}

set3 = set1.union(set2)
print(set3) # Poderá ser impresso {1, 2, 'a', 'b', 3, 'c'}

Observação: notem que o elemento 1 está tanto no set1 quanto no set2, porém, o resultado da união dos elementos dos sets no set3 são elementos únicos, pois os sets em Python não aceitam elementos repetidos.

Usando o método intersection() temos a intersecção entre dois sets:

set1 = {"a", "b" , "c", 1}
set2 = {1, 2, 3}

set3 = set1.intersection(set2)
print(set3) # Poderá ser impresso {1}

Já o método difference() traz a diferença entre dois sets:

set1 = {"a", "b" , "c", 1}
set2 = {1, 2, 3}

# Traz os elementos do set1 que não há no set2.
set3 = set1.difference(set2)
print(set3) # Poderá ser impresso {'c', 'b', 'a'}

# Traz os elementos do set2 que não há no set1.
set4 = set2.difference(set1)
print(set4) # Poderá ser impresso {2, 3}

Funções e palavras-chave usada neste artigo

Item

Descrição

set()

Cria um novo set

print()

Imprime o valor de uma variável ou expressão

for x in set

Acessa cada elemento de um set

if elemento in set

Verifica se um elemento está em um set

if elemento not in set

Verifica se um elemento não está em um set

len(set)

Retorna o tamanho de um set (quantidade de elementos)

add(elemento)

Adiciona um elemento em um set

Ao usá-lo, ela insere o elemento no set, sem ser em uma posição específica

update([elemento1, elemento2])

Adiciona vários elementos de uma só vez em um set

remove(elemento)

Remove um elemento específico de um set

Ao usá-lo, se o item a ser removido não existir, remove() gerará um erro

discard(elemento)

Remove um elemento específico de um set

Ao usá-lo, se o item a ser removido não existir, discard() não gerará um erro

pop()

Remove um elemento aleatório de um set

Ao usá-lo, como os sets não são ordenados, não se saberá qual item será removido

clear()

Remove todos os elementos de um set

del set

Elimina uma coleção inteira

copy()

Copia um set para outro

union()

Unifica dois sets

intersection()

Retorna a intersecção entre dois sets

difference()

Retorna a diferença entre dois sets


Tabela 1: revisão das funções, métodos, operadores e palavras-chave usada neste artigo.


Referências

  • PensePython2e – Tradução do livro Pense em Python (2ª ed.), de Allen B. Downey. Disponível em: https://penseallen.github.io/PensePython2e/
  • Python. Disponível em: https://www.python.org/
  • Python e Orientação a Objetos. Disponível em: https://www.caelum.com.br/apostila-python-orientacao-a-objetos
  • Python Reference (The Right Way). Disponível em: https://python-reference.readthedocs.io/en/latest/
  • Python Tutorial. Disponível em: htps://www.w3schools.com/python/

Então é isso!
[]’s e até a próxima!
_________________________
Professor Rogerão Araújo

Por
6 min. de leitura