Aprenda sobre estruturas de dados em Python para organizar e manipular dados. Explore tipos como strings, listas e pilhas neste tutorial.
Tipos de Dados Abstratos e Estruturas de Dados
Antes de explorarmos as estruturas de dados, vamos entender o que são Tipos de Dados Abstratos (TDAs). Eles simplificam a resolução de problemas, evitando detalhes técnicos.
Em resumo, estruturas de dados são uma forma de representar Tipos de Dados Abstratos usando construções de programação e tipos de dados. Elas se dividem em duas categorias: primitivas e não primitivas.
Estruturas de Dados Primitivas
Estas são as formas mais simples de representação de dados e são os blocos de construção para a manipulação de dados. Python possui quatro tipos primitivos de variáveis:
Inteiros
Você pode usar um inteiro para representar dados numéricos, especificamente números inteiros de menos infinito a mais infinito, como 4, 5 ou -1.
inteiro = 4
Float (Ponto Flutuante)
“Float” significa ‘número de ponto flutuante’. Você pode usá-lo para números racionais, geralmente com uma parte decimal, como 1.11 ou 3.14.
flutuante = 3.14
Strings
As strings são coleções de letras, palavras ou outros caracteres. Em Python, você pode criar strings colocando uma sequência de caracteres entre aspas simples ou duplas, por exemplo: ‘bolo’, “biscoito”, etc.
texto1 = 'Bolo'
texto2 = "Biscoito"
Você também pode realizar operações de concatenação de strings:
x = 'Bolo'
y = 'Biscoito'
resultado = x + ' & ' + y
print(resultado)
Isso imprimirá:
'Bolo & Biscoito'
Há muitas outras operações que você pode realizar com strings, como repetição e corte de substrings.
texto = 'Python'
repeticao = texto * 2 # Isso resultará em 'PythonPython'
substring = texto[2:] # Isso resultará em 'thon'
Além disso, Python oferece muitos métodos embutidos para manipular strings, como capitalize(), len(), isdigit(), replace(), find(), entre outros.
Booleanos
Este tipo de dado pode assumir os valores True (Verdadeiro) e False (Falso). Frequentemente, eles são intercambiáveis com os inteiros 1 e 0 e são úteis em expressões condicionais e de comparação.
x = 4
y = 2
comparacao = x == y # Isso resultará em False
comparacao2 = x > y # Isso resultará em True
Conversão de Tipos de Dados
Às vezes, você pode precisar converter um tipo de dado em outro. Por exemplo, converter um inteiro em um número de ponto flutuante ou vice-versa. Você pode fazer isso usando a “type casting” (conversão de tipos).
Conversão Implícita de Tipos de Dados
Isso acontece automaticamente e o compilador cuida disso para você. Por exemplo, ao dividir dois números inteiros em Python 3, o resultado será um número de ponto flutuante.
x = 4.0
y = 2
z = x / y # O resultado será um número de ponto flutuante
print(type(z)) # Isso imprimirá <class 'float'>
Conversão Explícita de Tipos de Dados
A conversão de tipos de dados explícita é definida pelo programador e você precisa informar ao compilador para qual tipo deseja converter os dados.
x = 2
y = "O Poderoso Chefão: Parte "
filme_favorito = y + str(x) # Convertendo o inteiro em uma string antes da concatenação
print(filme_favorito) # Isso imprimirá 'O Poderoso Chefão: Parte 2'
Esses são os tipos de dados primitivos e a conversão de tipos de dados em Python. Em seguida, vamos explorar as estruturas de dados não primitivas.
Estruturas de Dados Não Primitivas
As estruturas de dados não primitivas são mais complexas e podem armazenar coleções de valores em diversos formatos. Elas incluem:
Listas
As listas em Python são usadas para armazenar coleções de itens heterogêneos. Elas são mutáveis, o que significa que você pode alterar seu conteúdo sem alterar sua identidade. Você pode reconhecer listas pelos colchetes [ e ] que contêm elementos separados por vírgulas.
lista_vazia = [] # Lista vazia
lista_numeros = [1, 2, 3]
lista_mista = [1, 'maçã', 3.14]
print(lista_mista[1]) # Isso
imprimirá 'maçã'
Você pode adicionar, remover e modificar elementos em uma lista.
minha_lista = [1, 2, 3]
minha_lista.append(4) # Adicionando um elemento ao final da lista
minha_lista[0] = 0 # Modificando um elemento
del minha_lista[1] # Removendo um elemento
print(minha_lista) # Isso imprimirá [0, 3, 4]
Tuplas
As tuplas são semelhantes às listas, mas são imutáveis, o que significa que seus elementos não podem ser alterados após a criação. Você as reconhecerá pelos parênteses ( e ) que contêm elementos separados por vírgulas.
tupla_vazia = () # Tupla vazia
tupla_um_elemento = (42,) # Tupla com um elemento (necessário a vírgula)
coordenadas = (3, 4)
print(coordenadas[0]) # Isso imprimirá 3
Devido à sua imutabilidade, as tuplas são úteis quando você deseja garantir que os dados não sejam modificados acidentalmente.
Dicionários
Dicionários são estruturas de dados que armazenam pares chave-valor. Cada chave deve ser única, e os valores podem ser de qualquer tipo. Os dicionários são definidos com chaves { e }, com pares chave-valor separados por dois pontos :.
meu_dicionario = {
'nome': 'Alice',
'idade': 30,
'cidade': 'Wonderland'
}
print(meu_dicionario['idade']) # Isso imprimirá 30
Os dicionários são úteis para mapear informações relacionadas e facilitam a recuperação de valores com base em suas chaves.
Conjuntos
Conjuntos são coleções de elementos únicos, o que significa que não pode haver duplicatas em um conjunto. Eles são definidos com chaves { e }, semelhantes aos dicionários, mas sem pares chave-valor.
meu_conjunto = {1, 2, 3, 3, 4, 5}
print(meu_conjunto) # Isso imprimirá {1, 2, 3, 4, 5}
Os conjuntos são úteis quando você precisa armazenar elementos exclusivos ou realizar operações de conjunto, como união e interseção.
Arquivos
Python permite que você trabalhe com arquivos para armazenar informações persistentes. Você pode abrir, ler e escrever em arquivos usando funções embutidas.
# Abrindo um arquivo para escrita
arquivo = open('meu_arquivo.txt', 'w')
arquivo.write('Olá, mundo!')
arquivo.close()
# Abrindo um arquivo para leitura
arquivo = open('meu_arquivo.txt', 'r')
conteudo = arquivo.read()
arquivo.close()
print(conteudo) # Isso imprimirá 'Olá, mundo!'
Esses exemplos mostram como usar estruturas de dados em Python. Elas são ferramentas poderosas para organizar informações. À medida que você se torna mais experiente, pode usá-las de maneiras avançadas. Divirta-se explorando e pergunte se tiver dúvidas!
Outras Referências
Seleção de Estrutura de Dados: Um Estudo de Caso
Exercícios
- O que é []?
- Como você atribuiria o valor ‘hello’ como o terceiro valor de uma lista armazenada em uma variável chamada spam? (Suponha que spam contenha [2, 4, 6, 8, 10].)
- Para as três perguntas a seguir, vamos supor que spam contenha a lista [‘a’, ‘b’,’c’, ‘d’].
- Para que valor spam[int(int(‘3’ * 2) / 11)] é avaliado?
- Para que valor spam[-1] é avaliado?
- Para que valor spam[:2] é avaliado?
Para as três perguntas a seguir, vamos supor que bacon contenha a lista
[3.14, ‘cat’, 11, ‘cat’, True]. - Como bacon.append(99) altera o valor de lista em bacon?
- Como bacon.remove(‘cat’) altera o valor de lista em bacon?
- Qual é a diferença entre os métodos de lista append() e insert()?
- Quando você usaria um tipo de variável lista? E quando usaria um dicionário?
- Qual estrutura ocupa mais espaço na memória do computador? Um booleano ou uma string?
- Qual é a aparência do código para criar um dicionário vazio?
- Qual é a aparência de um valor de dicionário com uma chave igual a ‘foo’ e
um valor 42? - Qual é a principal diferença entre um dicionário e uma lista?
- O que acontecerá se você tentar acessar spam[‘foo’] se spam for igual a
{‘bar’: 100}?
Exercícios Desafio
1.Crie um programa que solicite ao usuário 5 nomes de alunos e suas respectivas notas e imprima a média da turma; Use uma lista para armazenar os dados e outra para armazenar os nomes;
2.Tente refazer o exercício anterior utilizando uma tupla; Deu erro? Por quê?
3.Como resolver o problema anterior usando tuplas?