⬅ Voltar ao Dashboard Capítulo 6 — Listas

📋 Introdução às Listas

Seção 6.0–6.3 — Criando, acessando, copiando e medindo listas

🏢 O que é uma lista?

Listas são um tipo de variável que permite o armazenamento de vários valores, acessados por um índice. Uma lista pode conter zero ou mais elementos de um mesmo tipo ou de tipos diversos, podendo inclusive conter outras listas. O tamanho de uma lista é igual à quantidade de elementos que ela contém.

Podemos imaginar uma lista como um edifício de apartamentos: o índice é o andar, o zero é o térreo, o primeiro andar é o 1, e assim por diante. A lista mais simples é a lista vazia:

Listagem 6.1 — Uma lista vaziaL = []

Os colchetes [] após o símbolo de igualdade indicam que L é uma lista. Vejamos como criar uma lista Z com 3 elementos:

Listagem 6.2 — Uma lista com três elementosZ = [15, 8, 9]

A lista Z foi criada com três elementos: 15, 8 e 9. O tamanho da lista é 3. O primeiro elemento tem índice 0, portanto o último elemento é Z[2]. Veja como acessar e modificar elementos no interpretador:

Listagem 6.3 — Acesso a uma lista>>> Z = [15, 8, 9] >>> Z[0] 15 >>> Z[1] 8 >>> Z[2] 9
Listagem 6.4 — Modificação de uma lista>>> Z = [15, 8, 9] >>> Z[0] 15 >>> Z[0] = 7 >>> Z[0] 7 >>> Z [7, 8, 9]

A lista permite calcular a média de notas sem precisar de cinco variáveis separadas. No programa abaixo, notas é um acumulador indexado:

Listagem 6.5 — Cálculo da médianotas = [6, 7, 5, 8, 9] soma = 0 x = 0 while x < 5: soma += notas[x] x += 1 print("Média: %5.2f" % (soma / 5))

Uma modificação interessante é ler as notas do usuário e armazená-las na lista durante a execução:

Listagem 6.6 — Cálculo da média com notas digitadasnotas = [0, 0, 0, 0, 0] soma = 0 x = 0 while x < 5: notas[x] = float(input("Nota %d: " % x)) soma += notas[x] x += 1 x = 0 while x < 5: print("Nota %d: %6.2f" % (x, notas[x])) x += 1 print("Média: %5.2f" % (soma / 5))

💡 A grande vantagem desse programa foi não precisar declarar cinco variáveis para guardar as cinco notas. Todas foram armazenadas na lista, utilizando um índice para identificar ou acessar cada valor.

🔢 6.1 Trabalhando com índices

Podemos trabalhar com índices de forma dinâmica. No exemplo abaixo, o programa lê cinco números, armazena-os em uma lista e depois solicita que o usuário escolha qual posição deseja ver. Observe que adicionamos 1 a x na entrada para que o usuário veja “Número 1” em vez de “Número 0”:

Listagem 6.7 — Apresentação de númerosnúmeros = [0, 0, 0, 0, 0] x = 0 while x < 5: números[x] = int(input("Número %d: " % (x + 1))) x += 1 while True: escolhido = int(input("Que posição você quer imprimir (0 para sair): ")) if escolhido == 0: break print("Você escolheu o número: %d" % (números[escolhido - 1]))

✂ 6.2 Cópia e fatiamento de listas

Um efeito colateral importante das listas aparece ao tentar copiá-las. Em Python, uma lista é um objeto e, ao atribuirmos um objeto a outro, estamos apenas copiando a mesma referência — não os dados em si:

Listagem 6.8 — Tentativa de copiar listas>>> L = [1, 2, 3, 4, 5] >>> V = L >>> V[0] = 6 >>> L [6, 2, 3, 4, 5] >>> V [6, 2, 3, 4, 5]

Ao modificarmos V, modificamos também L, pois ambas referenciam a mesma lista na memória. Para criar uma cópia independente, utilizamos L[:]:

Listagem 6.9 — Cópia de listas>>> L = [1, 2, 3, 4, 5] >>> V = L[:] >>> V[0] = 6 >>> L [1, 2, 3, 4, 5] >>> V [6, 2, 3, 4, 5]

Ao escrevermos L[:], estamos nos referindo a uma nova cópia de L. Índices negativos também funcionam — L[-1] é o último elemento, L[-2] o penúltimo:

Listagem 6.10 — Fatiamento de listas>>> L = [1, 2, 3, 4, 5] >>> L[0:5] [1, 2, 3, 4, 5] >>> L[:5] [1, 2, 3, 4, 5] >>> L[:-1] [1, 2, 3, 4] >>> L[1:3] [2, 3] >>> L[3:] [4, 5] >>> L[-1] 5 >>> L[-2] 4

📏 6.3 Tamanho de listas

Podemos usar a função len com listas. O valor retornado é igual ao número de elementos da lista:

Listagem 6.11 — Tamanho de listas>>> L = [22, 8, 5] >>> len(L) 3 >>> W = [] >>> len(W) 0

A função len pode ser utilizada em repetições para controlar o limite dos índices. Veja o exemplo com tamanho fixo e depois com len:

Listagem 6.12 — Repetição com tamanho fixo da listaL = [1, 2, 3] x = 0 while x < 3: print(L[x]) x += 1
Listagem 6.13 — Repetição com tamanho da lista usando lenL = [1, 2, 3] x = 0 while x < len(L): print(L[x]) x += 1

💡 A vantagem de usar len(L) é que se trocarmos L por uma lista maior ou menor, o resto do programa continua funcionando sem alterações. O valor retornado por len não pode ser usado como índice, mas é perfeito para testar os limites da lista.

✏ Exercícios

Exercício 6.1

Modifique o programa da Listagem 6.6 para ler 7 notas em vez de 5.