Listas
Uma lista guarda vários valores numa variável só, em ordem. Cada valor tem uma posição, o índice, que começa em 0. Quase tudo com lista é um laço passando pelas posições de 0 até len(lista) - 1.
Nesta lição0 de 4 vistas
numeros = [10, 25, 3, 47, 8]numeros[3] → 47
O número embaixo de cada caixa é o índice. São 5 elementos, então os índices vão de 0 a 4.
Caixinhas numeradas
Índice, len, fatia e inContando do fim, o Python também aceita índice negativo: -1 é o último, -2 o penúltimo e assim por diante. A fatia v[a:b] pega da posição a até antes da b.
Antes de rodar, preveja
Com numeros do exemplo. Se der erro, escreva erro.
numeros[0]numeros[2]numeros[-1]len(numeros)numeros[len(numeros) - 1]numeros[1:3]47 in numerosnumeros[5]
Mudando a lista
append, trocar, insert, del, pop e remove| Comando | O que faz |
|---|---|
notas.append(8) | coloca o 8 no fim |
notas[1] = 6 | troca o valor da posição 1 |
notas.insert(0, 5) | coloca o 5 na posição 0 e empurra os outros para a direita |
del notas[2] | tira o elemento da posição 2; os seguintes andam para a esquerda |
x = notas.pop() | tira o último e guarda em x |
notas.remove(7) | tira o primeiro 7 que encontrar (pelo valor, não pela posição) |
len(notas) | quantos elementos a lista tem agora |
Experimente
Cada botão acrescenta uma linha ao programa. As caixinhas mostram a lista depois dela; a verde é a que mudou.
notas = [7, 5, 9]
notas = [7, 5, 9]
Percorrer: pela posição ou pelo valor
while com índice ou for com o valorwhile com índice
i = 0while i < len(numeros):print(numeros[i])i = i + 1
Use quando precisar da posição: trocar valores, pesquisar onde está, comparar vizinhos. É o jeito que o professor prefere.
for com o valor
for x in numeros:print(x)
Mais curto quando só importa o valor: somar, contar, achar o maior. O x já é o valor, não a posição.
numeros = [7, 3, 9, 4]soma = 0i = 0while i < len(numeros):soma = soma + numeros[i]i = i + 1print(soma)
Linha 1numeros = [7, 3, 9, 4]
a saída aparece aquiQuando a lista é obrigatória
A pergunta que decideVou precisar dos valores de novo? Média é só somar e dividir: dá para fazer sem lista. Mas “quantos estão acima da média” precisa da média pronta antes de comparar cada valor, e aí os valores têm que estar guardados. Mostrar na ordem inversa, separar pares e ímpares, pesquisar uma posição: tudo isso pede lista.
notas = []i = 0while i < 4:notas.append(float(input()))i = i + 1media = sum(notas) / len(notas)acima = 0for n in notas:if n > media:acima = acima + 1print(media, acima)
A lista vazia nasce uma vez, antes do laço, como um acumulador. Rodando com as entradas 7, 5, 9 e 3.
Erros que mais aparecem na prova
6 errosUsar <= no while da lista.
while i <= len(v) chega em i = len(v), uma posição que não existe: o programa para com erro de índice. O certo é i < len(v).
Começar o índice em 1.
A primeira posição é 0. Começando em 1, o laço pula o primeiro elemento sem dar erro nenhum, o que é pior: a resposta sai errada em silêncio.
Criar a lista dentro do laço.
lista = [] dentro do laço esvazia a lista a cada volta, e no fim ela só tem o último valor. A lista vazia nasce uma vez, antes do laço, como um acumulador.
Confundir valor com posição.
No for x in lista, o x já é o valor. lista[x] usa o valor como se fosse posição. E o del recebe a posição: del frutas[2] tira o terceiro, não o número 2.
Começar o maior em 0.
Se todos os valores forem negativos, o 0 nunca é trocado e vira a resposta. Comece o maior e o menor com o primeiro elemento: maior = v[0].
Imprimir dentro do laço sem querer.
Na pesquisa, o print de “não encontrado” dentro do laço aparece uma vez por elemento. A resposta vem depois do laço, num if.