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