Menu

Sets em Python: itens únicos, união, interseção e diferença

Quando usar um set em Python — unicidade, checagens in rápidas e as operações estilo matemática (união, interseção, diferença) que tornam sets poderosos.

Um set é uma sacola não ordenada de itens únicos

Onde listas e tuplas se importam com ordem, sets não. Onde listas deixam duplicatas se acumularem, sets silenciosamente descartam. O set é a estrutura de dados certa quando você tem duas necessidades específicas:

  1. Quer itens únicos, ponto final.
  2. Quer checar pertinência rápido.

Escreva um com chaves:

main.py
Output
Click Run to see the output here.

O "red" e "green" duplicados no segundo set simplesmente somem. Isso não é erro — é o ponto todo.

Criando sets

As duas formas que você vai usar de fato:

main.py
Output
Click Run to see the output here.

Esse último ponto pega todo mundo uma vez: {} cria um dicionário vazio, não um set vazio. A ambiguidade sintática tinha que cair sobre um dos dois, e os dicts venceram.

Adicionando e removendo

main.py
Output
Click Run to see the output here.

remove vs discard é a distinção-chave: remove insiste que o item esteja presente; discard não liga. Escolha com base em se a ausência do item deve ser erro.

Pertinência rápida

É aqui que sets realmente ganham seu lugar. x in algum_set roda em tempo constante, não importa quão grande o set seja. x in alguma_lista tem que caminhar pela lista, o que fica lento quando a lista é grande.

main.py
Output
Click Run to see the output here.

Regra prática: qualquer hora que você se pegar escrevendo if x in alguma_lista dentro de um laço, e a lista tem mais de algumas dezenas de itens, converta a lista em set antes.

Matemática de sets

É aqui que sets ficam realmente divertidos. Você pode combinar eles com operadores que espelham operações matemáticas de conjuntos:

main.py
Output
Click Run to see the output here.

Cada operador também tem uma forma de método (.union(), .intersection(), .difference(), .symmetric_difference()). Os operadores são mais compactos; as formas de método aceitam qualquer iterável, não só outro set.

Deduplicando uma lista

Um dos usos mais comuns de sets, mesmo fora da "lógica de sets":

main.py
Output
Click Run to see the output here.

Uma linha, duplicatas sumidas. Uma coisa para notar: a ordem não é preservada. Se você precisa de unicidade e da ordem original, use dict.fromkeys():

main.py
Output
Click Run to see the output here.

Dicts preservam a ordem de inserção no Python moderno, e dict.fromkeys constrói um usando os itens do iterável como chaves — efetivamente um set ordenado.

Subconjuntos e superconjuntos

Checando se um set está contido em outro:

main.py
Output
Click Run to see the output here.

Aparecem em coisas como checagens de permissão ("este usuário tem todas as roles requeridas?").

O que pode entrar num set

Só itens hashable. Esse é um termo técnico — na prática significa:

  • Coisas imutáveis são hashable: números, strings, tuplas de hashables, frozensets.
  • Coisas mutáveis não são: listas, dicts, outros sets não podem ser membros de set.
main.py
Output
Click Run to see the output here.

Se precisa de um set de sets, use frozenset — é uma versão imutável de set.

Iteração é não ordenada

Percorrer um set te dá itens em nenhuma ordem garantida:

main.py
Output
Click Run to see the output here.

Rode isso algumas vezes e você vai ver a ordem variar. Se ordem importa, set não é a estrutura certa — ordene o conteúdo quando precisar, ou use uma lista.

Quando não usar um set

Se qualquer uma destas é verdadeira, lista ou dict provavelmente encaixa melhor:

  • Você se importa com ordem.
  • Você precisa guardar duplicatas.
  • Cada item tem dados associados (use um dict com o item como chave).

Seguindo em frente

Sets lidam com unicidade e pertinência. Dicionários — a seguir — lidam com o padrão mais amplo "buscar um valor por uma chave", que é provavelmente a estrutura de dados não lista mais útil em Python.

Perguntas frequentes

O que é um set em Python?

Um set é uma coleção não ordenada de itens únicos. Sets usam chaves sem pares chave-valor: cores = {'red', 'green', 'blue'}. Adicionar o mesmo valor duas vezes não faz nada — duplicatas são silenciosamente descartadas.

Quando devo usar um set em vez de uma lista?

Use um set quando se importa com unicidade ou quando vai fazer muitas checagens de pertinência (x in colecao). Sets removem duplicatas automaticamente e checam pertinência em tempo constante, o que para coleções grandes é uma aceleração enorme em relação a listas.

Como crio um set vazio em Python?

Use set(), não {} — chaves vazias criam um dicionário vazio, não um set vazio. Uma vez que você tem um set, pode adicionar itens com .add(valor).

Aprenda a programar com o Coddy

COMEÇAR