Vetores:
uma caixa
com gavetas
Da criação de listas ao acesso por índice — e o primeiro algoritmo clássico de busca: a busca linear em Python.
Da criação de listas ao acesso por índice — e o primeiro algoritmo clássico de busca: a busca linear em Python.
A1Entender por que muitas variáveis soltas não escalam e o que motiva o uso de vetores
A1Criar listas em Python e acessar elementos por índice — positivos e negativos
A2Entender por que escrever 100 se's aninhados é um beco sem saída — e como o laço resolve
A2Implementar uma busca linear com iteração, comparação e retorno de posição
Você foi contratado para construir um sistema de gestão escolar. Uma das funcionalidades: calcular a média de uma turma de 40 alunos. Sem vetor, você precisaria…
nota1, nota2, …, nota40)input(…)E se a turma virar 200 alunos? E se precisar achar a maior nota? O código vira impossível de manter.
nota1 = float(input())
nota2 = float(input())
nota3 = float(input())
nota4 = float(input())
nota5 = float(input())
# … 35 linhas a mais até nota40!
media = (nota1 + nota2 + nota3
+ nota4 + nota5 + ...
+ nota40) / 40
print(f"Média: {media}")
Um vetor (também chamado de array ou arranjo) é uma estrutura que armazena vários valores do mesmo tipo sob um único nome, organizados sequencialmente na memória. Cada valor é identificado por sua posição — o índice.
A ordem dos elementos é preservada — o primeiro item permanece o primeiro até você modificá-lo.
Diferente de arrays clássicos, listas Python crescem e encolhem com .append(), .pop(), etc.
Qualquer elemento pode ser acessado instantaneamente pelo seu índice — O(1).
Suporta índices negativos (lista[-1] = último) e fatiamento (lista[1:4]).
endereço_base + índice × tamanho_do_ponteiro e chega no elemento sem percorrer os anteriores.
Python (como C, Java e JS) usa base 0: o primeiro elemento está em [0], o último em [tamanho - 1]. Mas Python tem um superpoder extra: índices negativos que contam de trás para frente.
Primeiro elemento em notas[0]. Último em notas[4] ou notas[len(notas) - 1].
notas[-1] é sempre o último — não importa o tamanho da lista. notas[-2] é o penúltimo, e assim por diante.
notas[5] em uma lista de 5 elementos gera IndexError: list index out of range. O último índice válido é sempre tamanho - 1.
notas = []
# Leitura das 40 notas
for i in range(40):
nota = float(input(f"Nota {i+1}: "))
notas.append(nota)
# Cálculo da média
soma = 0
for i in range(40):
soma = soma + notas[i]
media = soma / 40
print(f"Média: {media:.2f}")
Nota 1: 8.5 Nota 2: 7.0 Nota 3: 9.5 ⋮ Nota 40: 6.8 Média: 7.42 # range(40) gera 0..39 # por isso o "i+1" só # para exibir de forma # humanizada.
notas = [] cria uma lista vazia; .append(nota) cresce a lista dinamicamente; for i in range(40) percorre os índices 0 a 39. Atalho Python: sum(notas) / len(notas) resolve a média em uma linha — mas entender o laço é essencial.
Na Aula 1 aprendemos a guardar dados em vetores. Mas guardar é só metade da história — a outra metade é recuperar. Como verificar se um valor específico está dentro do vetor? Esse é o problema da busca, e a forma mais simples de resolvê-lo tem nome: busca linear.
Sistema de controle de estoque: você tem uma lista com 100 códigos de produto e precisa verificar se o código 4587 está cadastrado.
Sem laço, o código vira uma escada infinita de if-elif:
produtos[0] com 4587produtos[1] com 4587produtos[2]… e assim até [99]Resultado: centenas de linhas para um problema que cabe em uma dúzia.
codigo_procurado = 4587
if produtos[0] == codigo_procurado:
print("Posição 0")
elif produtos[1] == codigo_procurado:
print("Posição 1")
elif produtos[2] == codigo_procurado:
print("Posição 2")
elif produtos[3] == codigo_procurado:
print("Posição 3")
# … e assim por diante
# até produtos[99]!
else:
print("Não encontrado")
A busca linear (ou busca sequencial) é o algoritmo mais simples para encontrar um valor dentro de um vetor. A ideia: percorrer cada elemento, um por um, até encontrar o procurado — ou até esgotar todas as posições.
Procurando 23? Confere [0] → não. [1] → não. [2] → não. [3] → encontrou! O algoritmo para imediatamente e retorna a posição.
Esta é a receita completa do algoritmo. Guarde-a: no próximo slide você vai implementá-la sozinho.
Prepare os dados. Tenha a lista de números e leia o valor procurado com input().
Crie a "posição encontrada". Uma variável posicao = -1 — o -1 significa "ainda não achei".
Percorra a lista. Use for i in range(len(lista)) para visitar cada índice, um por um.
Compare e marque. Se lista[i] == alvo, guarde posicao = i e use break para parar o laço.
Decida a resposta. Depois do laço: se posicao != -1, mostre a posição; senão, avise que não foi encontrado.
break do passo 4 é essencial. Sem ele, o laço continua rodando mesmo depois de encontrar — desperdiçando comparações e podendo sobrescrever a posição correta.
Complete o programa abaixo. Ele deve procurar o valor digitado pelo usuário e dizer em que posição ele está — ou avisar que não existe. Siga os 5 passos do slide anterior.
numeros = [15, 42, 8, 23, 16, 4, 31]
alvo = int(input("Valor a procurar: "))
posicao = -1 # 2 · "ainda não achei"
for i in range(len(numeros)): # 3 · percorre os índices
if numeros[i] == alvo: # 4 · compara
posicao = i # marca a posição
break # e para o laço
if posicao != -1: # 5 · decide a resposta
print(f"Encontrado na posição: {posicao}")
else:
print("Valor não encontrado.")
Valor a procurar: 23
Encontrado na posição: 3
── seu programa deve passar ──
──────── nos 3 testes ────────
Valor a procurar: 99
Valor não encontrado.
Valor a procurar: 15
Encontrado na posição: 0
if — sem usar os atalhos alvo in numeros ou numeros.index(). Teste com os três valores ao lado: 23, 99 e 15.
Um algoritmo de busca linear procura o valor 50 em um vetor de 100 elementos. O valor 50 não está no vetor. Quantas comparações o algoritmo fará até concluir que ele não existe?
O(n) — dobrar o vetor dobra o tempo no pior caso.
O(1)[0], último em [len(lista) - 1] ou [-1]lista = [], .append(), for i in range(len(lista))break ao encontrarO(n) — proporcional ao tamanho da listaBubble Sort + Estatísticas de vetor — aprenderemos o primeiro algoritmo de ordenação (com trocas adjacentes) e como calcular média, máximo e mínimo com uma única varredura.
Vídeo objetivo mostrando como vetores são criados, preenchidos e aplicados na prática. Reforça os conceitos da Aula 1 com exemplos reais.
📎 BÓSON TREINAMENTOS — Declaração e atribuição de valores a vetores em lógica de programação. YouTube, 18 fev. 2021.
youtube.com/watch?v=Kvts4cOv2qM
Visualização passo a passo de como cada algoritmo encontra (ou não) um valor dentro de um conjunto de dados. Ótimo para fixar a Aula 2.
📎 GIOVANNA MOELLER — Algoritmos de busca: linear e binária. YouTube, 23 nov. 2022.
youtube.com/watch?v=KUUXv6rBCrY
ARANHA, R. V. Algoritmos e estruturas de dados II: busca sequencial. UFMT, [s.d.]. Disponível em: ufmt.dev/aed2/buscas/sequencial. Acesso em: 28 nov. 2025.
OLIVEIRA, I. Estrutura de dados parte 2: algoritmos de busca. DEV, 17 fev. 2023. Disponível em: dev.to/oliverigor27/estrutura-de-dados-parte-2-algoritimos-de-busca-3kg1. Acesso em: 28 nov. 2025.
Base institucional: SEDUC-SP. Educação Profissional Paulista — Técnico em Desenvolvimento de Sistemas. Componente 1, Unidade 4, Semana 11 (SISANO1C1B2S11A1 e SISANO1C1B2S11A2).
Identidade visual · imagens © Getty Images · adaptação para apresentação HTML por Guilherme Antunes