Article image

JP

Jean Pierre29/07/2024 17:22
Compartilhe

Como dominar estruturas de dados com Python

  • #Python

Introdução

😄 Olá pessoal, sejam bem-vindos a uma aventura pelo mundo da programação em Python! Hoje, vamos mergulhar de cabeça no fascinante universo das estruturas de dados em Python. Se você está pronto para explorar e desvendar os segredos por trás das listas, dicionários, conjuntos e muito mais, então prepare-se para esse artigo que será emocionante!

O que são estruturas de dados no Python?

Estruturas de dados em Python são formas de organizar e armazenar dados de maneira eficiente. Elas são cruciais para lidar com informações de forma organizada e acessível, o que é essencial em programação.

Quais os tipos de estruturas de dados nativas do Python?

O Python oferece uma variedade de estruturas de dados nativas, sendo "listas, tuplas, dicionários e conjuntos" algumas delas, as quais veremos nesse artigo. Cada tipo de estrutura possui suas próprias características e é útil para diferentes situações, desde a ordenação de dados até a busca rápida de elementos únicos.  🔍📚

 

Vamos ver com detalhes sobre cada uma delas:

Listas 📋

Imagine que você tem uma caixa onde pode guardar seus carrinhos de coleção favoritos. Cada carrinho tem um lugar específico na caixa, e você pode encontrar e pegar qualquer carrinho facilmente,  pois cada um tem seu lugar especifíco dentro da caixa. Podemos pensar dessa forma também com uma "lista" em Python.

 "Listas" são coleções ordenadas e mutáveis de itens. Isso significa que você pode adicionar, remover e modificar elementos nelas. Por exemplo, uma lista pode ser usada para armazenar nomes de alunos em uma turma. 👱🏼👩🧑🏻

alunos = ["João", "Maria", "Carlos"]
print(alunos[0]) # Retorna o aluno na posição 0 da lista "alunos"

Saida: João
alunos.append("Ana")
print(alunos) # Retorna a lista de alunos completa

Saida: ["João", "Maria", "Carlos", "Ana"]

Nesse exemplo é criado uma lista chamada "alunos" com três nomes: João, Maria e Carlos. Em seguida, imprimimos o primeiro nome da lista, que é "João". Depois, adicionamos o nome "Ana" à lista de alunos através da função append e imprimimos a lista novamente, agora incluindo o nome adicionado, resultando em:

["João", "Maria", "Carlos", "Ana"] 
Vale ressaltar que, como no exemplo dos carrinhos de coleção, onde cada carrinho possui seu lugar especifico dentro da caixa, assim também são com as listas. Quando queremos saber as posições de cada elemento dentro da lista (nesse caso, o nome cada aluno da turma), contamos quantos elementos existem dentro da lista, começando a nossa contagem partir do 0.

Veja um exemplo a seguir com a estrutura de dados do tipo Lista:

print(alunos[0]) # Retorna o primeiro elemento da lista que é "João"

Saida: João 
print(alunos[1]) # Retorna o segundo elemento da lista que é "Maria"

Saida: Maria 
print(alunos[2]) # Retorna o terceiro elemento da lista que é "Carlos"

Saida: Carlos 
print(alunos[3]) # Retorna o quarto elemento da lista que é "Ana"

Saida: Ana 

Tuplas 🔐

Agora vamos imaginar que você tem uma caixinha mágica onde você pode guardar vários objetos, mas com uma condição: uma vez que você coloca os objetos lá dentro, você não pode mais mudar a ordem deles ou trocar os objetos. Essa caixinha mágica é o que chamamos de "tupla" em Python.

 Uma tupla é uma estrutura de dados que serve para guardar vários valores juntos em um lugar só. São semelhantes às listas, porém, em vez de serem definidas com o uso de "[ ]" (colchetes), são definidas com o uso de "( )" (parênteses). Além disso, vale ressaltar que tuplas são imutáveis, de modo que, uma vez que você as cria, não pode adicionar, remover ou modificar itens dentro delas. São úteis quando você precisa garantir que os dados não mudem, como coordenadas geográficas. 📦🔒

coordenadas = (10, 20)
x, y = coordenadas
print("Coordenada X:", x)  

Saida: Coordenada X: 10
print("Coordenada Y:", y) 

Saida: Coordenada Y: 20
📝 Nesse exemplo criamos uma estrutura de tupla chamada coordenadas que armazena dois valores: 10 e 20. Em seguida, usamos a técnica de desempacotamento, que extrai e armazena os valores que estavam contidos dentro da tupla coordenadas, para dentro das variáveis x e y. Por fim, imprimimos na tela os valores.  
Vale também lembrar que, assim como as listas, tuplas também possuem cada um dos seus itens em um lugar especifíco. Quando queremos saber as posições de cada elemento dentro da tupla (nesse caso, as coordenas 10 e 20), contamos quantos elementos existem dentro da lista, começando a nossa contagem partir do 0.

🔍 Veja o exemplo abaixo com a estrutura de dados do tipo Tuplas:

print(coordenadas[0]) # Retorna o primeiro elemento da tupla que é "10"

Saida: 10 
print(coordenadas[1]) # Retorna o segundo elemento da tupla que é "20"

Saida: 20

Dicionários 📒

Agora imagine que você tem uma agenda onde guarda os números de telefone e endereços de seus amigos. Cada amigo tem um nome e várias informações associadas a ele, como número de telefone e email, de modo que uma pessoa possui várias informações relacionadas a ela. Dessa mesma forma funciona um dicionário em Python, onde podemos criar uma estrutura de dados que armazena-os de uma forma que se assemelha a uma agenda de contatos. 📞📧

Dicionários são coleções não ordenadas de pares chave-valor, onde podemos associar um valor a uma chave e obter esse valor rapidamente usando a chave correspondente. Diferentemente das listas e das tuplas, dicionários são definidos através do uso de "{ }" (chaves). Dentro das { } usamos a nomenclatura de {chave : valor}, onde podemos armazenar várias 'chaves' que possuem um 'valor', dentro de um único dicionário. Dicionários são úteis para organizar dados relacionados, permitindo acessar facilmente informações específicas, usando chaves para identificar cada valor. 🔑🔍

Abaixo podemos ver um exemplo de código com a estrutura de dados do tipo Dicionários:

contato = {'nome': 'João', 'email': 'joao@example.com', 'telefone': '123456789'}
print(contato['email']) 

Saida: joao@example.com
Nesse exemplo criamos um dicionário em Python chamado contato, que contém informações sobre uma pessoa, como nome, email e telefone. Em seguida, acessamos a chave  email que esta contida dentro do dicionário contato e imprimimos na tela o "email" dessa pessoa, que está armazenado dentro do dicionário. 💼📤

Conjuntos

Agora pense comigo, vamos supor que você tenha uma coleção de moedas raras e antigas, a qual você está colecionando. Cada moeda é única, ou seja, você não quer ter moedas repetidas na sua coleção, pois não faria sentido você ter mais de uma mesma moeda, não é? Da mesma forma são os conjuntos em Python. Eles são como uma coleção de moedas, onde cada moeda só pode aparecer apenas uma vez dentro do conjunto.

De forma resumida, conjunto são coleções não ordenadas de elementos únicos. Eles são úteis quando você precisa garantir que não haja duplicatas em seus dados, porém, não se importa com a ordem que os itens serão apresentados. Por exemplo, você pode usar um conjunto para armazenar os IDs de usuários únicos de um sistema. 🆔🔐

Agora veja um exemplo de código com a estrutura de dados do tipo Conjuntos:

numeros = {1, 2, 3, 4, 5}
numeros.add(6)

numeros.add(4)  # Não adicionará 4 novamente, pois conjuntos não aceitam elementos duplicados
print(numeros)  

Saida: {4, 3, 6, 1, 2, 5} 
Nesse exemplo, definimos um conjunto que contém os números de 1 a 5. Em seguida, adicionamos o número 6 ao conjunto usando a função add. Mesmo tentando adicionar o número 4 novamente ele não será adicionado, porque conjuntos não aceitam elementos repetidos. No final, imprimimos o conjunto atualizado, que agora inclui o número 6. 🔢✅

Outras estruturas de dados em Python:

Filas

🚶‍♂️🎡 Agora vamos dizer que você está na fila de um parque de diversões esperando para entrar na montanha-russa. Quem chega primeiro entra primeiro, certo? Uma fila em programação funciona da mesma maneira! Em Python, usamos a estrutura de dados "fila" para organizar as coisas exatamente dessa forma.

Estruturas de dados do tipo "fila" seguem a regra do primeiro a entrar, primeiro a sair (FIFO - First In, First Out). O primeiro elemento adicionado à fila será o primeiro a ser removido. Elas são comumente usadas em algoritmos de processamento de tarefas em ordem cronológica. ⏳📋

Agora veja esse exemplo de código com a estrutura de dados do tipo ***Fila***:

from queue import Queue
fila = Queue() 

fila.put(1)
fila.put(2)
fila.put(3)
print(fila.get())

Saida: 1 # Elemento removido da fila
Primeiro, importamos a classe Queue da biblioteca queue, que nos permite criar filas. Depois, criamos uma fila chamada fila. Em seguida, adicionamos três números à fila: 1, 2 e 3, usando o método put(). Finalmente, usamos o método get() para remover e imprimir o primeiro número da fila, que é 1.

A fila funciona como uma linha de pessoas esperando por atendimento: o primeiro a entrar é o primeiro a sair. 🚶‍♂️🚪

Árvores 🌳🌟

Uma árvore em programação é como uma árvore de verdade, mas ao invés de folhas e galhos, ela possui valores e conexões. Pense em uma árvore de Natal. No topo, tem a estrela (ou a raiz), e dela saem vários galhos (ou nós), e desses galhos saem mais galhos menores. 🎄✨

Vamos imaginar uma árvore simples com apenas três bolinhas de Natal. A primeira bolinha é a raiz, que está no topo, e tem duas bolinhas penduradas nela, que são os filhos.

Então, nossa árvore seria assim:

  1
 / \
2   3

Aqui, a bolinha com o número 1 é a raiz, e as bolinhas 2 e 3 são os filhos da raiz. Isso ajuda a organizar informações de uma maneira que fica fácil de encontrar o que estamos procurando. 🔍🧐

Com isso entendemos que:

- A raiz é o ponto de partida, como o tronco da árvore.

- Os nós são os pontos que se conectam, como os galhos e folhas.

- Os filhos são as bolinhas penduradas, que estão ligadas ao nó pai.

Abaixo podemos ver um exemplo em código de uma estrutura de dados do tipo Árvore:

class No:

  def __init__(self, valor):

      self.valor = valor
      self.filhos = []
raiz = No(1)

raiz.filhos.append(No(2))

raiz.filhos.append(No(3))

Primeiro, criamos uma classe chamada No, que representa cada "nó" da árvore. Um nó pode conter um valor e ter "filhos", que são outros nós conectados a ele. A função __init__ é o que chamamos de "construtor", e ela define o que acontece quando criamos um novo nó. Nesse caso, quando cada novo nó é criado, ele recebe um valor e começa com uma lista vazia de filhos. 🛠️✔️

Em seguida, criamos a "raiz" da árvore, que é o nó principal, com o valor 1. Depois, adicionamos dois nós filhos à raiz, com os valores 2 e 3. Isso cria uma árvore onde o nó 1 é a raiz e tem dois filhos, 2 e 3. Em outras palavras, a estrutura da árvore desse código representa a estrutura de árvore de natal que usamos para explicar o conceito de árvore anteriormente.

  1
 / \
2   3

Conclusão 🎓✨

Curtiu esse conteúdo e gostou de aprender sobre estruturas de dados em Python? Então não deixa de me seguir nas redes sociais e se conectar comigo no Instagram e no Linkedin 🚀👨‍💻

Fontes de produção:

Ilustrações: gerada pela IA Midjourney

Hashtags

#Python #EstruturasDeDados #BackEnd
Compartilhe
Comentários (2)
EVERSON RIBEIRO
EVERSON RIBEIRO - 29/07/2024 18:28

explicou de forma clara! Muito Bom!

JP

Junea Prado - 29/07/2024 18:06

Muito bom !