Conjuntos em Python - set e frozenset
Os conjuntos são um tipo de dados do python que nunca ouvi falar muito. Eu particularmente nunca usei, mas dando uma olhada agora vi que são muito interessantes.
Uma coisa que eu precisei fazer ontem foi retirar dados repedidos de uma lista, e não existe um método de lista que faça isso. Já nos conjuntos isso é automático, não existem dados repetidos.
A diferença entre set e frozenset, é que o primeiro é mutável, já o segunto não. Criando um conjunto…
Veja que é passado um tipo iterável para o set(nessa caso uma string), onde cada elemento vai ser um elemento do conjunto.
Veja que realmente ele não permite elementos repetidos.
Você deve ter percebido que os elementos não estão na mesma ordem que foram passados. Isso porquê conjuntos realmente não possuem nenhuma ordem. São iteráveis, ou seja, podemos fazer for x in meu_conjunto
, len(meu_conjunto)
, x in meu_conjunto
. Mas como eles não possuem ordem, não é permitido indexação, nem slicing, algo tipo meu_conjunto[2:]
está errado.
Mas vamos a algumas operações entre conjuntos.
Está contido e contém
Também podemos usar os operadores
União
Interseção
Diferença
Operações entre sets e frozensets são permitidas, mas veja que a ordem em que eles aparecem importa
Outra coisa importante, é que podemos passar iteráveis tanto na criação do set como nas operações usando os métodos. Mas as operações usando os operadores devem ser obrigatoriamente entre sets:
Os sets, por serem mutáveis, também possuem métodos que adicionar e remover novos elementos. Como os frozensets são imutáveis, não possuem esse métodos
O conjunto.update(outro_conjunto)
, atualiza conjunto
adicionando os elementos de outro_conjunto
. Tem também os métodos set.add(x)
, set.remove(x)
, set.pop()
, set.clear()
. Além do set.discard(x)
, que só remove o elemento se ele existir, diferente do remove()
que retorna KeyError
caso o elemento não exista.
O exemplo que eu citei no começo, de retirar dados repetidos de uma lista poderia ter sido feito assim:
Simples não?
Veja mais detalhes sobre conjuntos aqui