As listas e tuplas são estruturas de dados que
nos permitem armazenar elementos de maneira ordenada e sequencial, mantendo a ordem dos elementos e oferecem índices para acessar esses valores.
As listas são ideais quando você precisa de uma coleção de elementos que pode ser modificada ao longo do tempo, são estruturas mutáveis, o que significa que é possível modificar seus elementos, adicionar novos itens ou remover existentes após a criação da lista, podendo inclusive utilizar funções próprias para isso como append(), remove(), pop(), e insert().
Já as tuplas são apropriadas quando se deseja garantir que os elementos não sejam alterados após a criação, são imutáveis. Uma vez que uma tupla é criada, seus elementos não podem ser alterados, adicionados ou removidos.
Devido à sua imutabilidade, as tuplas têm um desempenho melhor do que listas para algumas operações. Elas são mais eficientes em termos de espaço e processamento em determinados cenários.
🟤 TUPLAS
Uma tupla é uma estrutura de dados que pode armazenar múltiplos itens em uma única variável. Diferente das listas, as tuplas são imutáveis, o que significa que, uma vez criada, seus elementos não podem ser alterados, adicionados ou removidos. Tuplas são definidas usando parênteses () e os itens são separados por vírgulas.
Exemplo de uma tupla chamada friends:
friends = ('amanda', 'luisa', 'rafael')
Ou seja, a tupla é uma lista, só que imutável (não sofre alteração durante a execução do programa), e ao invés de utilizarmos os colchetes [ ], utilizaremos parênteses ( ).
Algumas características:
🚩 Ordenadas: Os elementos têm uma ordem definida que não pode ser alterada.
🚩 Permite duplicatas: Tuplas podem conter dados não homogêneos (heterogêneos), contendo múltiplos valores iguais.
🚩 Diferente tipo de dados: Uma tupla pode conter strings, números, listas, etc.
Se tentarmos alterar o valor da tupla, Python resultará em erro pelo motivo que falamos acima, as tuplas não podem ser alteradas, uma vez criadas.
friends = ('amanda', 'luisa', 'rafael)
# minha_tupla[0] = 'jose' # Isso gerará um erro
🟤 LISTAS
Uma lista (armazenamento) é uma coleção ordenada de objetos, separados por vírgula e entre colchetes.
As listas podem ter elementos duplicados, podem ter em uma mesma lista nome, número, etc, porem, é recomendável que uma lista seja feita de dados homogêneos, ou seja, com elementos pertencentes a mesma categoria.
É possível editar, remover, incluir, ordenar, executar métodos (append, index, etc) de objetos de lista.
É importante ressaltar que Python considera que o primeiro elemento de uma lista esta na posição 0 e não na posição 1. O segundo elemento de uma lista, esta na posição 1 e assim por diante.
Para criar uma lista precisamos nomeá-la, neste exemplo minha lista se chamará "friends":
🚩 Lista vazia:
friends = [ ] # Lista chamada friends, e esta vazia, sem nenhum elemento entre o colchetes.
🚩 Lista com elementos:
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
🚩 Lista com elementos, e o comando para Python printar o elemento de número 1
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
print(friends[1])
A saída será luisa, pois o primeiro elemento de índice 0 é amanda, o segundo, luisa.
Para melhor entendimento os elementos das lista representadas pelo índice, ficaria assim:
friends = [0, 1, 2, 3, 4, 5]
🚩 Lista com elementos, e o comando para Python printar o último elemento da lista
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
print(friends[-1])
A saída será rafael pois o último elemento da lista será índice -1, o penúltimo, -2, e assim por diante.
Métodos em uma lista
Para manusear elementos da lista para incluir, excluir, etc, utilizamos os métodos em Python.
Método é uma função que pertence a um objeto específico e os métodos são chamados em objetos e podem acessar e modificar os elementos dentro do objeto que estão sendo chamados. Uma lista, existem alguns métodos como append, insert, remove, etc, esses métodos são específicos para objeto do tipo lista e podem ser chamados em qualquer instância dessa classe de objeto. Os métodos são semelhantes a funções, mas estão associados a um objeto.
✳️ insert e append (incluir dado em uma lista)
Podemos adicionar um elemento novo em qualquer posição com o método insert(). Para isso, você precisa especificar o índice do elemento novo e o valor(dado) dele.
No exemplo abaixo, nome da lista + . ponto para chamar o método + ( ) parênteses + índice que desejo adicionar + , + novo valor que quero adicionar na lista.
Ou seja, no script abaixo estou pedindo que Python adicione na primeira posição (0) na lista existente friends o nome 'alfredo'. Sempre que foi uma string utilizamos aspas duplas ou simples " " ou ' ' e sempre que tiver # inicial, significa que é um comentário no código e o que esta nesta linha, não será executado.
friends.insert(0, 'alfredo')
Para adicionar um elemento no final da lista, podemos utilizar o método .append()
lista = [1, 2, 3]
lista.append(4)
print(lista)
# Saída: [1, 2, 3, 4]
A diferença entre insert e append é que com o insert, você poderá adicionar um elemento em qualquer posição da lista, já o método append necessita apenas de um valor como argumento para inseri-lo no final da lista.
✳️ del, pop() e remove() (Excluir dados em uma lista)
Podemos remover um elemento de uma lista utilizando del, através do índice.
No exemplo abaixo, estou executando o comando para excluir o primeiro nome da lista (posição 0)
del friends[0]
O método pop remove o último item da lista se você não especificar qual o elemento que deseja excluir.
No exemplo abaixo, utilizei apenas .pop() sem especificar o item, por tanto. Python considera o último item da lista.
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
poped_friends = friends.pop()
print(friends)
A saída será: ['amanda', 'luisa', 'camila', 'roger']
Para especificar qual elemento desejo excluir, colocaria o índice dentro de parênteses, conforme exemplo abaixo:
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
poped_friends = friends.pop(2)
print(friends)
A saída será a lista completa, sem o nome da camila, que ocupa o índice 2 da lista.
Para remover um elemento de uma lista através do valor dele, utilizaremos o método remove
friends = ['amanda', 'luisa', 'camila', 'roger', 'rafael']
friends.remove('roger')
print(friends)
Obs: O método remove deleta apenas a primeira ocorrência do valor especificado. Se existirem valores duplicados na lista, é necessário usar um loop.
✳️ Ordenamento de uma lista
Método sort() altera permanentemente para ordem alfabética os elementos da lista:
friends.sort()
Para utilizar a ordem alfabética reversa:
friends.sort(reverse=True)
Caso você não queira alterar permanentemente os elementos de uma lista, mas apenas printar em ordem ordenada, podemos utilizar a função sorted().
print(sorted(friends))
✳️Exibir uma lista em ordem reversa
friends.reverse()
Como resultado, o primeiro item da lista passa a ser rafael.
O método reverse() altera permanentemente a ordem de uma lista, mas podemos reverter para a ordem original a qualquer momento aplicando reverse() à mesma lista na segunda vez.
✳️ Tamanho de uma lista
Utilizamos a função len para contar quantos elementos existem em uma determinada lista.
len(friends)
Principais métodos utilizados em listas:
Nome do Método | Descrição |
append() | Adiciona um elemento ao final da lista. |
clear() | Remove todos os elementos da lista. |
copy() | Retorna uma cópia superficial da lista. |
count() | Retorna o número de ocorrências de um determinado elemento na lista. |
extend() | Adiciona os elementos de uma lista (ou qualquer iterável) ao final da lista. |
index() | Retorna o índice do primeiro elemento com o valor especificado. |
insert() | Adiciona um elemento em uma posição específica da lista. |
pop() | Remove e retorna o elemento na posição especificada (ou o último elemento, se não houver índice especificado). |
remove() | Remove a primeira ocorrência do elemento com o valor especificado. |
reverse() | Inverte a ordem dos elementos na lista. |
sort() | Ordena os elementos da lista em ordem crescente por padrão (ou de acordo com uma função de comparação opcional). |
len() | Retorna o número de elementos na lista. |
max() | Retorna o elemento com o valor máximo na lista. |
min() | Retorna o elemento com o valor mínimo na lista. |
join() | Concatena todos os elementos de uma lista em uma única string, usando um separador especificado. |
del | Remove um elemento em uma posição ou fatia específica da lista. |
slice() | Retorna uma parte da lista, especificando um intervalo de índices. |
Loop para percorrer uma lista
Os loops possibilitam que executemos a mesma ação ou várias ações, com todos os itens da lista, sendo assim, é um facilitador para trabalharmos com listas com milhares de dados.
Quando queremos percorrer todos os elementos de uma lista, executamos a mesma tarefa para cada item de uma lista.
Exemplo:
friends = ['amanda', 'luisa', 'pedro', 'gabriel']
for friend in friends:
print(friends)
a saída será:
['amanda', 'luisa', 'pedro', 'gabriel']
['amanda', 'luisa', 'pedro', 'gabriel']
['amanda', 'luisa', 'pedro', 'gabriel']
['amanda', 'luisa', 'pedro', 'gabriel']
Pois para cada elemento da lista, python executa o comando print.
Função range
A função range() é bastante útil para gerar uma série de números
for valor in range(1, 6):
print(valor)
A saída será os números começando em 1 e terminando em 5.
1
2
3
4
5
Para criar uma lista de números com range utilizaremos também a função list(), chamamos isso de wrapper, a saída será uma lista de números.
numeros = list(range(1, 6))
print(numeros)
A saída será uma lista contendo números de 1 a 5.
[1, 2, 3, 4, 5]
Podemos utilizar a função range para informar ao Python que desconsidere algum intervalo.
Por exemplo o primeiro argumento em range estou solicitando a Python que inicie a contagem em 1, que percorra até o item 12, e de 2 em 2 casas. Chamamos isso de step ou intervalo numérico.
numeros = list(range(1, 12, 2))
print(numeros)
saída: [1, 3, 5, 7, 9, 11]
Dicionário dentro de uma lista
A utilização de dicionários dentro de uma lista em Python oferece várias vantagens,
especialmente quando você trabalha com coleções de dados estruturados e heterogêneos.
É uma forma poderosa e prática de organizar dados estruturados e trabalhar com eles de maneira eficiente!
No exemplo abaixo, dentro de uma única lista [ ], contem diversos (3) dicionários:
Acessar um dicionário específico na lista:
Use o índice da lista para acessar o dicionário correspondente.
print(restaurantes[0]) # {'nome': 'Praça', 'categoria': 'Japonesa', 'ativo': False}
Acessar um valor específico de um dicionário:
Após acessar o dicionário, use a chave para obter o valor.
print(restaurantes[0]['nome']) # 'Praça'
print(restaurantes[1]['ativo']) # True
Filtrar restaurantes ativos:
Use uma compreensão de lista para selecionar apenas os restaurantes com 'ativo': True.
ativos = [r for r in restaurantes if r['ativo']]
print(ativos)
# [{'nome': 'Pizza Suprema', 'categoria': 'Pizza', 'ativo': True}]
Atualizar um valor em um dicionário:
Modifique diretamente os valores usando índices e chaves.
restaurantes[2]['ativo'] = True
print(restaurantes[2])
# {'nome': 'Cantina', 'categoria': 'Italiano', 'ativo': True}
Vantagens em utilizar dicionários em uma lista
✔ Organização e Estruturação de Dados
Cada dicionário pode representar um item ou entidade com várias propriedades (chave-valor).
Isso permite que você organize dados complexos de maneira mais compreensível.
clientes = [
{"nome": "João", "idade": 30, "cidade": "São Paulo"},
{"nome": "Maria", "idade": 25, "cidade": "Rio de Janeiro"},
{"nome": "Carlos", "idade": 35, "cidade": "Belo Horizonte"}
]
Aqui, cada cliente é representado como um dicionário, e todos eles são armazenados em uma lista.
✔ Flexibilidade para Trabalhar com Dados Heterogêneos
Como os dicionários podem armazenar diferentes tipos de valores (strings, números, listas, etc.), é fácil representar dados variados.
estoque = [
{"produto": "Cadeira", "quantidade": 10, "cores": ["preto", "azul"]},
{"produto": "Mesa", "quantidade": 5, "cores": ["marrom"]},
]
✔ Acesso Fácil a Propriedades Específicas
É simples acessar as propriedades específicas de um item com base nas chaves do dicionário.
for cliente in clientes:
print(cliente["nome"]) # Acessa o nome de cada cliente
✔ Facilidade de Filtragem e Pesquisa
É fácil realizar pesquisas e filtros na lista com base nos valores das chaves do dicionário.
# Filtrar clientes com idade maior que 30
clientes_mais_velhos = [c for c in clientes if c["idade"] > 30]
✔ Escalabilidade
Essa estrutura é escalonável para um número maior de itens e atributos, especialmente em situações onde os atributos podem variar entre os itens.
# Adicionando um novo cliente com mais propriedades
clientes.append({"nome": "Ana", "idade": 28, "cidade": "Curitiba", "vip": True})
✔ Compatibilidade com JSON
Dicionários dentro de listas são uma estrutura muito semelhante ao formato JSON, amplamente utilizada para troca de dados em APIs e serviços web.
import json
print(json.dumps(clientes, indent=4)) # Converte a lista de dicionários para JSON formatado
✔ Processamento e Manipulação Simplificada
É fácil realizar operações como agrupamento, atualização de valores e adição de novos itens diretamente nos dicionários.
# Atualizar a cidade de João
for cliente in clientes:
if cliente["nome"] == "João":
cliente["cidade"] = "Campinas"