-
Chegou a hora de a gente
dar uma olhada no "set",
-
mais uma estrutura de dados
que representa um conjunto de itens.
-
É claro que a gente vai comparar
o set com as outras estruturas.
-
E, quando a gente fala dessa aqui,
a gente está falando também
-
de uma espécie de lista,
ou um conjunto de itens,
-
mas o seu ponto forte é
que ela não é ordenável,
-
ou seja, a gente não tem
o conceito de indexação
-
dentro dos itens de um set.
-
A gente consegue adicionar
e consegue remover itens,
-
consegue iterar, mas não consegue
acessar os itens individualmente
-
usando os seus índices.
-
Vamos lá para o VS Code criar
um set e ver como isso funciona.
-
Eu já tenho o arquivo main.py
criado aqui dentro do VS Code,
-
então vamos começar criando
uma variável chamada "numeros".
-
E o set varia um pouco
das outras estruturas,
-
porque a sua declaração não
vai usar colchetes, parênteses
-
ou alguma coisa do tipo,
-
mas sim um construtor
específico do tipo set,
-
ou seja, a gente vai precisar
escrever "set" e executar isso aqui.
-
Pronto, a partir desse momento,
eu já tenho o meu set construído
-
e eu vou escrever
o código aqui
-
para exibir os itens
dele lá no terminal.
-
Então, eu vou colocar
aqui "print(numeros)"
-
e vou executar
o "python.exe .\main.py".
-
Legal, eu tenho aqui, basicamente,
a execução do meu set
-
sem nenhum item dentro.
-
Diferentemente
das outras estruturas,
-
o set não permite que a gente
coloque valores iniciais
-
durante a inicialização do tipo.
-
Então, a gente vai,
basicamente,
-
vir aqui embaixo e colocar
"numeros.add"
-
que é o método que permite
que a gente coloque novos valores
-
naquele conjunto.
-
Então, eu vou começar
colocando, aqui, o 1,
-
depois eu vou colocar o valor
2 e, por último, o valor 3.
-
Se a gente executar o nosso
código novamente,
-
a gente já consegue ver, aqui
no terminal, entre chaves,
-
os itens daquele
nosso conjunto.
-
E, agora, a gente vai colocar à prova
aquilo que a gente comentou,
-
porque, como eu disse, o set é
um conjunto não ordenado, ou seja,
-
os itens, embora estejam
aparecendo na ordem 1, 2, 3
-
e, muito provavelmente,
vão respeitar essa ordem
-
conforme a gente
for executando,
-
em tempo de execução, não
necessariamente estão nessa ordem.
-
E, se o nosso set
for muito grande,
-
a gente pode até mesmo
presenciar casos
-
em que, ao exibir um item uma vez,
um item está em uma posição tal
-
e, na outra vez,
-
ele vai estar em uma posição
completamente diferente.
-
E, por esse motivo, se a gente
insistir e tentar acessar,
-
usando os colchetes,
alguma posição específica,
-
por exemplo, a terceira
posição, no índice 2,
-
o Python retornará
um erro para a gente,
-
falando que o set não é
"subscriptable", ou seja,
-
a gente não consegue acessar
uma indexação específica.
-
Se a característica de acessar
os itens através de índice
-
for realmente necessária,
o set não é a melhor estrutura
-
para o que você
está tentando fazer.
-
O set brilha mesmo
-
na sua característica de não
permitir itens duplicados.
-
Ou seja, enquanto
na lista e na tupla
-
a gente consegue colocar
itens repetidos lá dentro,
-
no caso do set é
um pouco diferente,
-
ele simplesmente não aceita
esse tipo de operação.
-
Mas ele também não dá
um erro, ele só não a faz.
-
Se a gente tentar
executar o método add
-
passando o valor,
por exemplo, 2
-
e, logo em seguida,
fazer a mesma operação,
-
ele vai adicionar
no primeiro momento,
-
mas a segunda operação vai
ser completamente ignorada,
-
fazendo, assim, com que a gente
não tenha itens repetidos, olha só.
-
Aqui no nosso código, a gente
já colocou o 1, o 2 e o 3.
-
Olha o que acontece se eu
repetir o 1 mais algumas vezes.
-
Eu vou tirar, aqui,
esse acesso de índice,
-
porque ele é
uma sintaxe inválida,
-
e eu vou limpar o terminal
para poder executar de novo.
-
Repare que a gente manteve
os nossos mesmos três itens,
-
porque, na linha três, eu
consegui adicionar o valor 1,
-
mas, nas linhas seguintes,
-
o Python ignorou completamente
a ação de adicionar,
-
porque a estrutura do set não
permite esse tipo de cenário,
-
e é uma característica dele.
-
A gente também
consegue remover itens,
-
e isso é bem parecido
com as outras estruturas,
-
basta que a gente passe para ele
o valor que a gente quer remover.
-
E como, nesse caso,
não tem repetição,
-
a gente não precisa nem se preocupar
com múltiplas ocorrências.
-
Dá uma olhada.
-
Aqui no final, eu vou vir e vou
executar "numeros.remove",
-
e, para ele, eu vou passar,
por exemplo, o número 2,
-
que é aquele valor que a gente
adicionou logo depois do 1.
-
Executando esse código, a gente
consegue ver que o 1 está lá,
-
sem nenhuma repetição,
o 3 também,
-
mas o 2 não faz mais
parte desse conjunto.
-
A gente está começando
a perceber, aqui,
-
que cada estrutura tem suas
próprias características
-
e isso é muito importante.
-
Existem cenários em que a gente
vai conseguir, por exemplo,
-
usar uma lista e usar
o set ao mesmo tempo.
-
Mas, dependendo do que
a gente precisar fazer,
-
uma vai atender
melhor do que a outra.
-
Se a gente precisasse, por exemplo,
receber 10 números de um usuário,
-
de forma que esses números
não fossem repetidos,
-
usando uma lista, a gente teria
que, a cada iteração de um loop,
-
verificar se o que o usuário digitou
já está dentro daquela lista.
-
E, se estiver, a gente ignora essa
operação e pede o número novamente.
-
Trabalhar com o set
-
vai permitir que a gente
chegue no mesmo resultado,
-
mas de uma forma
bem mais simples,
-
porque esse comportamento
-
em que a gente teria que adicionar
através de uma condição
-
é algo nativo daquele tipo,
-
e a gente não vai ter
que se preocupar com isso.