3 min de leitura
#2 - Arrays e Listas
Como a lista nativa do Python funciona como um array dinâmico, os métodos prontos que ela já traz, e como criar seu próprio algoritmo em cima dela.
No post anterior, você viu o que é DSA e como medir a eficiência de um algoritmo com complexidade de tempo. Agora é hora de começar pela estrutura de dados mais básica e mais usada de todas: a lista.
Listas como array dinâmico
Em Python, listas são a estrutura de dados embutida que funciona como um array dinâmico — ordenada, mutável, e capaz de guardar elementos de tipos diferentes ao mesmo tempo.
# Lista vazia
x = []
# Lista com valores iniciais
y = [1, 2, 3, 4, 5]
# Lista com tipos misturados
z = [1, "olá", 3.14, True]
Métodos de lista
Além de criar e acessar listas, o Python já vem com vários métodos prontos (que nada mais são do que algoritmos já implementados pra você) pra tarefas comuns, como adicionar um item ou ordenar a lista inteira.
x = [9, 12, 7, 4, 11]
# Adiciona um elemento
x.append(8)
# Ordena a lista, do menor pro maior
x.sort()
print(x)
A saída é:
[4, 7, 8, 9, 11, 12]
Criando seu próprio algoritmo
Às vezes você precisa de uma operação que o Python não oferece pronta — é nesse momento que entra a criação do seu próprio algoritmo. No post anterior, você já viu um exemplo clássico: encontrar o menor valor de uma lista, comparando elemento por elemento. Vamos ver outro, igualmente comum: somar todos os valores.
minha_lista = [7, 12, 9, 4, 11, 8]
soma = 0
for valor in minha_lista:
soma += valor
print("Soma total:", soma)
A saída é:
Soma total: 51
Esse algoritmo é simples e roda rápido o bastante pra listas pequenas — mas, assim como o de encontrar o menor valor, qualquer algoritmo vai levar mais tempo conforme os dados crescem. É por isso que otimização é uma parte tão importante do desenvolvimento de algoritmos, e da programação DSA de forma geral.
Complexidade de tempo
Assim como o algoritmo de encontrar o menor valor visto no post anterior, o algoritmo de soma acima precisa visitar cada elemento da lista uma única vez — o loop roda n vezes pra uma lista de n valores. A complexidade de tempo, portanto, é O(n): linear, proporcional ao tamanho da lista.
Já um método como x.sort(), embora pareça uma linha só de código, não é O(n) — ordenar uma lista exige comparar valores entre si repetidamente, e ao longo desta série você vai entender exatamente por que isso custa mais caro (e como diferentes algoritmos de ordenação lidam com esse custo de formas diferentes).
Com listas cobertas, o próximo passo é conhecer duas estruturas que se comportam de um jeito bem específico — sempre adicionando e removendo elementos por uma ponta só: pilhas e filas.
Fonte adaptada: Python Lists and Arrays
Comentários