Pular para o conteúdo

Conjunto

Definição

Um conjunto (set) é uma coleção não ordenada, não indexada e que não permite elemento duplicado.

Um conjunto pode ser criado com o método set() ou com a especificação de todos os elementos, separados por vírgulas e dentro de chaves {}. O exemplo abaixo mostra a criação de dois conjuntos, x e y, com os mesmos elementos. Note que se usa parêntesis duplos com o método set(), o primeiro parêntesis é do método e o segundo parêntesis delimita os elementos do conjunto.

x = {"teste", 12.3, 1, (1,2,3)}
y = set(("teste", 12.3, 1, (1,2,3)))

Exemplos

Para listar os elementos de um conjunto, basta usar a operação in. O exemplo abaixo indica o tipo do elemento do conjunto e o valor do elemento.

x = {"teste", 12.3, 1, (1,2,3)}
for i in x:
  print(type(i), ":", (i))

A resposta é mostrada abaixo. Não é possível definir lista e dicionário como elementos de um conjunto.

<class 'int'> : 1
<class 'str'> : teste
<class 'tuple'> : (1, 2, 3)
<class 'float'> : 12.3

Para criar um conjunto vazio e verificar o seu conteúdo, basta entrar com

x = {}
print("x = ", x)

Métodos

  • O método add() permite adicionar um elemento a um conjunto. O programa a seguir adiciona dois elementos ao conjunto x: uma string e um número inteiro. Se o elemento já existe no conjunto, este não sofre mudança.
x = {"teste", 12.3, 1, (1,2,3)}
print("x = ", x)
x.add("abc")
x.add(5)
print("x = ", x)

A execução do programa mostra:

x =  {1, 'teste', 12.3, (1, 2, 3)}
x =  {1, 5, 'abc', (1, 2, 3), 12.3, 'teste'}
  • O método clear() remove todos os elementos de um conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
print("x = ", x)
x.clear()
print("x = ", x)

A resposta obtida:

x =  {1, (1, 2, 3), 12.3, 'teste'}
x =  set()
  • O método copy() cria um objeto diferente que possui elementos com valores idênticos ao do conjunto original.
x = {"teste", 12.3, 1, (1,2,3)}
print("id =", id(x), ", x = ", x)
y = x.copy()
print("id =", id(y), ", y = ", y)

A resposta mostra que x e y possuem id diferentes, portanto são dois objetos distintos apesar de possuírem os mesmos elementos.

id = 140325186436000 , x =  {1, 'teste', 12.3, (1, 2, 3)}
id = 140325185363296 , y =  {1, 'teste', 12.3, (1, 2, 3)}
  • O método difference() retorna um conjunto com os elementos que existem em um conjunto e não existe no outro.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "abc", 2}
print("Diferença de x para y =", x.difference(y))
print("Diferença de y para x =", y.difference(x))

A resposta mostra primeiro o que não tem em y, depois mostra o que não tem em x.

Diferença de x para y = {1, 'teste', 12.3}
Diferença de y para x = {2, 'abc'}
  • O método difference_update() remove os elementos de um conjunto que estão também em outro conjunto. O programa
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "abc", 2}
x.difference_update(y)
print("x =", x)

mostra como resultado

x = {'teste', 1, 12.3}
  • O método discard() remove um determinado elemento do conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
x.discard((1,2,3))
print("x =", x)

O conjunto x passa a ser:

x = {1, 12.3, 'teste'}
  • O método intersection() retorna os elementos comuns em dois conjuntos.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
print("x =", x.intersection(y))

O programa encontra dois elementos que existem tanto em x quanto em y.

x = {'teste', (1, 2, 3)}
  • O método intersection_update() remove os elementos de um conjunto que não estão presentes em um outro conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
x.intersection_update(y)
print("x =", x)

A resposta do exemplo é

x = {(1, 2, 3), 'teste'}
  • O método isdisjoint() retorna True se os dois conjuntos não possuem elementos em comum e retorna False se os conjuntos possuem pelo menos um elemento comum.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
z = {"python", 16, 14.8}

if x.isdisjoint(y):
   print("x e y não possuem elementos comuns")
else:
   print("x e y possuem elementos comuns")
if x.isdisjoint(z):
   print("x e z não possuem elementos comuns")
else:
   print("x e z possuem elementos comuns")

Note que x e y têm elementos em comum, enquanto x e z são dois conjuntos disjuntos.

x e y possuem elementos comuns
x e z não possuem elementos comuns
  • O método issubset() verifica se um conjunto é um subconjunto de outro conjunto maior (ou igual).
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
z = {"teste", 12.3}
if y.issubset(x):
   print("y é um subconjunto de x")
else:
   print("y não é um subconjunto de x")
if z.issubset(x):
   print("z é um subconjunto de x")
else:
   print("z não é um subconjunto de x")

A resposta obtida com o programa:

y não é um subconjunto de x
z é um subconjunto de x
  • O método issuperset() verifica se um conjunto possui um determinado subconjunto.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
z = {"teste", 12.3}

if x.issuperset(y):
   print("x contém o subconjunto y")
else:
   print("x não contém o subconjunto y")
if x.issubset(z):
   print("x contém o subconjunto z")
else:
   print("x contém o subconjunto z")

É fácil notar no programa acima que y \not \subset x e z \subset x .

x não contém o subconjunto y
x contém o subconjunto z
  • O método pop() remove o primeiro elemento de um conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
print("x =", x)
x.pop()
print("x =", x)
x.pop()
print("x =", x)

Note que a ordem de retirada dos elementos obedece a ordem usada pelo Python para armazenar os elementos do conjunto.

x = {1, (1, 2, 3), 12.3, 'teste'}
x = {(1, 2, 3), 12.3, 'teste'}
x = {12.3, 'teste'}

  • O método remove() permite remover um determinado elemento do conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
x.remove(12.3)
print("x =", x)

A resposta do programa é

x = {'teste', 1, (1, 2, 3)}
  • O método symmetric_difference() mostra os elementos que só existem em um dos conjuntos (não existem nos dois conjuntos).
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
print(x.symmetric_difference(y))

Os elementos que só existem em x ou que só existem em y são mostrados abaixo.

{1, 2, 'abc', 12.3}
  • O método symmetric_difference_update() remove os elementos que estão presentes nos dois conjuntos.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
x.symmetric_difference_update(y)
print("x = ", x)

A resposta do programa é

x =  {1, 2, 12.3, 'abc'}
  • O método union() tem como resultado a união de dois conjuntos.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
print(x.union(y))

O resultado do programa é

{1, 'teste', 2, 'abc', (1, 2, 3), 12.3}
  • O método update() atualiza um conjunto usando um outro conjunto.
x = {"teste", 12.3, 1, (1,2,3)}
y = {(1,2,3), "teste", "abc", 2}
x.update(y)
print(x)

O conjunto x ao final do programa é mostrado abaixo.

{1, 2, (1, 2, 3), 12.3, 'abc', 'teste'}