Listas são coleções ordenadas (a ordem dos elementos na lista é significativa: o 1º elemento, o 2º elemento, etc), indexadas (cada elemento da lista é identificável por um índice) e que permitem a duplicação de elementos, a exemplo de:
Conjuntos (sets), por outro lado, são coleções não ordenadas, não indexadas e sem duplicação de elementos, pode ser representada por algo como:
# Definindo um conjunto vazio por meio da função set()
c = set()
# Um elemento pode ser adicionado a um conjunto por meio do método add()
c.add(8.15)
c.add('João')
c.add(45)
c.add('Fortaleza')
c.add(45)
print(c)
Note que a ordem dos valores no conjunto não guarda necessariamente relação com a ordem na qual eles foram adicionados.
Note, também, que o valor 45 aparece uma única vez no conjunto apesar dele ter sido adicionado duas vezes.
# Cria uma lista com valores repetidos
lista = [1001, 9834, 2, 1001, -43, 18, 2, 2, 9834]
# Cria um conjunto a partir da lista de valores, resultando na eliminação das repetições
s = set(lista)
print(s)
Abaixo estão algumas funções e ações sobre conjuntos que são similares às vistas sobre listas, tuplas e strings:
# Definindo dois conjuntos de número
c1 = {2, 10}
c2 = {10, 14, 8, 2}
# True se c1 e c2 são disjuntos, ou seja, se eles não têm elementos em comum (intersecção vazia)
c1.isdisjoint(c2)
True se c1 é um subconjunto de c2, ou seja, $c1 \subseteq c2$
# Subconjunto
c1.issubset(c2)
True se c1 é um subconjunto próprio de c2, ou seja, $c1 \subset c2$ e $c1 \neq c2$
# Subconjunto próprio
c1 < c2
# União dos conjuntos
c3 = {-5, 10}
cj = c1.union(c2, c3)
print(cj)
# Remove e retorna um elemento arbitrário do conjunto
c1.pop()
print(c1)
Calcular o número de valores distintos dentre um conjunto de valores inteiros dados. Por exemplo, considerando os valores 10, 18, 12 e 10, temos 3 valores distintos. Já entre 10, 10, 10, 10 há um único valor distinto.
Na primeira linha dos dados de entrada está o valor inteiro n, seguido do n valores inteiros, um em cada linha. O programa abaixo realiza esta tarefa.
n = int(input())
valores = set() # cria um conjunto vazio
for _ in range(n):
valores.add(int(input())) # acrescenta o valor lido no conjunto, já eliminando as repetições
print(valores)
print(len(valores)) # imprime a cardinalidade do conjunto, ou seja a quantidade de valores distintos