1 of 35

Listas e Vetores

2 of 35

Motivação

  • Se o usuário precisa digitar uma sequência de números e depois mostrar esta sequência em ordem inversa. Como fazer?
  • Para uma sequência de quatro números, poderíamos utilizar quatro variáveis.
  • Exemplo: numero1, numero2, numero3, numero4
  • E para uma sequência de 100 números? Como faríamos?
  • Como armazenar vários valores em uma única estrutura de armazenamento?

3 of 35

Listas/Vetores

  • Listas: Armazenam vários elementos sob o nome de uma mesma variável
  • Vetores: São arranjos de vários elementos do mesmo tipo primitivo
    • Em Python, usamos listas para implementar vetores
    • Em outras linguagens, listas e vetores são diferentes
  • Vários valores em posições diferentes, guardando uma ordem específica entre si
  • Elementos podem ser repetidos ou não

4 of 35

Ilustração de uma lista/vetor

  • Exemplo: Um vetor capaz de armazenar 7 números inteiros, chamado numeros.

numeros

0

1

2

3

4

5

6

  • Todas as posições pertencem ao vetor numeros, e cada uma dessas posições é capaz de armazenar um número inteiro;

  • O acesso a cada um dos valores armazenados em numeros é feito por um índice que cada posição possui.

  • Na linguagem Python, esses índices iniciam-se no valor zero, ou seja, o índice da primeira posição de numeros é o zero e o índice da última posição de numeros é o 6.

5 of 35

Inicialização de uma lista/vetor

  • Forma Geral:

nomevariavel = []

nomevariavel = [a1,a2,...,an]

onde:

nomevariavel: nome da(o) lista/vetor

[] : Representa uma lista/vetor vazia(o)

[a1, ..., an] : representa uma lista pré-inicializada

Exemplos:

dados = []

numeros = [4, 5, 7, 4, 9, 5]

dias = ['seg','ter','qua','qui','sex','sab','dom']

lista = [1, 2, 3.1416, 'Maria']

6 of 35

Acesso aos elementos de uma lista

  • Para ter acesso a cada elemento da lista, é necessário especificar o nome da lista seguido do índice da posição desejada, este último entre colchetes.

Exemplos:

  • Armazenando o valor 15 na 4ª posição da lista numeros:

numeros[3] = 15

print(numeros)

>> [4, 5, 7, 15, 9, 5]

  • Lendo um número inteiro do teclado e armazenando-o na 1ª posição da lista numeros:

numeros[0] = int(input())

#Supondo que o usuário digitou 30

print(numeros)

>> [30, 5, 7, 15, 9, 5]

7 of 35

E se acessamos uma posição que não existe?

  • Relembrando a lista/vetor numeros:

numeros = [30, 5, 7, 15, 9, 5]

  • Tentando mostrar o elemento na posição 3:

print(numeros[3])

15

  • Tentando mostrar um elemento com a posição 7:

print(numeros[7])

Traceback (most recent call last):� File "<pyshell#11>", line 1, in <module>� print(num[7])�IndexError: list index out of range

8 of 35

Adicionando novos elementos a uma lista

  • Relembrando a lista/vetor numeros:

numeros = [30, 5, 7, 15, 9, 5]

  • Como adicionar elementos em posições que não existem?
  • Adicionando um elemento no final da lista:

numeros.append(40)

print(numeros)

>> [30, 5, 7, 15, 9, 5, 40]

  • Adicionando um elemento antes do final da lista:

numeros.insert(1, 500)

print(numeros)

>> [30, 500, 5, 7, 15, 9, 5, 40]

  • Usar insert em uma posição maior que a última funciona como exatamente como append, adiciona-se o elemento no final

9 of 35

Removendo elementos de uma lista

  • Relembrando a lista/vetor numeros:

numeros = [30, 500, 5, 7, 15, 9, 5, 40]

  • Há duas maneiras de remover elementos
  • 1) Buscando um elemento e removendo sua primeira aparição:

numeros.remove(5)

print(numeros)

>> [30, 500, 7, 15, 9, 5, 40]

  • 2) Removendo o elemento que estiver numa dada posição:

x = numeros.pop(3)

print(numeros)

>> [30, 500, 7, 9, 5, 40]

print(x)

>> 15

  • Se o pop() não tiver parâmetro, remove-se o último da lista

10 of 35

Acesso aos elementos de uma lista

Mais Exemplos:

  • Imprimindo o 6º elemento da vetor numeros:

print(numeros[5])

  • Imprimindo um elemento com a posição especificada por uma variável:

print(numeros[x])

  • Imprimindo um elemento com a posição especificada pelo resultado de uma expressão:

print(numeros[x+2])

x = 3

numeros[x] = 20

x = 5

numeros[x] = 32

11 of 35

Acesso aos elementos de uma lista

ATENÇÃO - IMPORTANTE

Sendo numeros uma lista, se for feito:

numeros = input()

Os valores armazenados anteriormente na lista serão perdidos e a variável não será mais uma lista, mas receberá a string que for digitada pelo usuário.

12 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

lista

13 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

for i in range(10):

lista.append(0)

lista

0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

14 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

for i in range(10):

lista.append(0)

lista[0]=50

lista

0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

50

15 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

for i in range(10):

lista.append(0)

lista[0]=50

lista[1]=100

lista

0

1

2

3

4

5

6

7

8

9

50

0

0

0

0

0

0

0

0

0

100

16 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

for i in range(10):

lista.append(0)

lista[0]=50

lista[1]=100

i = 7

lista[i] = -4

lista

0

1

2

3

4

5

6

7

8

9

50

100

0

0

0

0

0

0

0

0

-4

17 of 35

Acesso aos elementos de uma lista

Exemplo:

lista = []

for i in range(10):

lista.append(0)

lista[0]=50

lista[1]=100

i = 7

lista[i] = -4

i = 3

lista[i] = 300

lista

0

1

2

3

4

5

6

7

8

9

50

100

0

0

0

0

0

-4

0

0

300

18 of 35

Exemplo 1

  • Programa que lê 10 valores inteiros, armazena-os em uma lista e, em seguida, mostra os valores lidos:

lista = []

for i in range(10):

numero = int(input("Digite um número: "))

lista.append(numero)

print("\nValores lidos:")

# repare que o índice da lista é sempre inteiro

for i in range(10):

print(lista[i])

19 of 35

A faixa de valores da lista é conhecida

  • Exemplo 1 (segunda possibilidade):

lista = []

for i in range(10):

numero = int(input("Digite um número: "))

lista.append(numero)

print("\nValores lidos:")

for i in range(len(lista)):

print(lista[i])

20 of 35

Às vezes, é mais simples iterar com for..each

  • Exemplo 1 (terceira possibilidade):

lista = []

for i in range(10):

numero = int(input("Digite um número: "))

lista.append(numero)

print("\nValores lidos:")

for elemento in lista:

print(elemento)

21 of 35

Exemplo 2

  • Programa que lê 7 valores inteiros, armazena-os em uma lista e, em seguida, mostra os valores lidos em ordem inversa à leitura:

lista = []

for i in range(7):

numero = int(input("Digite um número: "))

lista.append(numero)

print("\nValores lidos:")

for i in range(6, -1, -1):

print(lista[i])

22 of 35

Exemplo 3

  • Programa que lê n valores inteiros (n é um valor inteiro entre 1 e 100 e deve ser lido), armazena-os em uma lista e, em seguida, mostra os valores pares lidos:

lista = []

n = int(input("Digite o numero de elementos: "))

assert isinstance(n, int) and 1 <= n <= 100

for i in range(n):

numero=int(input("Digite o elemento %d da lista: " % (i + 1)))

lista.append(numero)

print("\nValores pares:")

for i in range(n):

if (lista[i] % 2 == 0):

print(lista[i])

23 of 35

Exemplo 3 (com for..each)

  • Programa que lê n valores inteiros (n é um valor inteiro entre 1 e 100 e deve ser lido), armazena-os em uma lista e, em seguida, mostra os valores pares lidos:

lista = []

n = int(input("Digite o numero de elementos: "))

assert isinstance(n, int) and 1 <= n <= 100

for i in range(n):

numero=int(input("Digite o elemento %d da lista: " % (i + 1)))

lista.append(numero)

print("\nValores pares:")

for valor in lista:

if (valor % 2 == 0):

print(valor)

24 of 35

Exemplo 3 (com try...except)

  • Programa que lê n valores inteiros (n é um valor inteiro entre 1 e 100 e deve ser lido), armazena-os em uma lista e, em seguida, mostra os valores pares lidos:

lista = []

while True:

try:

n = int(input("Digite o numero de elementos: "))

assert isinstance(n, int) and 1 <= n <= 100

break

except AssertionError:

print("voce digitou numero invalido ou de tipo errado")

for i in range(n):

numero=int(input("Digite o elemento %d da lista: " % (i + 1)))

lista.append(numero)

print("\nValores pares:")

for i in range(n):

if (lista[i] % 2 == 0):

print(lista[i])

25 of 35

Exemplo 4

  • Escreva um programa que leia 20 notas e armazene-as em uma lista chamada notas. Em seguida calcule e imprima a média das notas e as notas que estão acima da média.

notas = []

soma = 0

for i in range(20):

nota = float(input("Digite a nota %d: " % (i + 1)))

notas.append(nota)

soma = soma + nota

media = soma/20

print("\nA média é %.2f." % media)

print("\nAs notas acima da média foram: ")

for i in range(20):

if (notas[i] > media):

print("%.2f" % notas[i])

26 of 35

Exemplo 4 (com for..each)

  • Escreva um programa que leia 20 notas e armazene-as em uma lista chamada notas. Em seguida calcule e imprima a média das notas e as notas que estão acima da média.

notas = []

soma = 0

for i in range(20):

nota = float(input("Digite a nota %d: " % (i + 1)))

notas.append(nota)

soma = soma + nota

media = soma/20

print("\nA média é %.2f." % media)

print("\nAs notas acima da média foram: ")

for nota in notas:

if (nota > media):

print("%.2f" % nota)

27 of 35

TDD para fazer função que calcule a média das notas de uma lista

from estatisticas import media

# classe de valores válidos

assert media([10, 10, 10]) == 10.0

assert media([5, 3, 1, 9, 7]) == 5.0

assert media([6.5, 9.5]) == 8.0

assert media([5]) == 5.0

assert media([6.5]) == 6.5

assert 0.333 <= media([0,1,0]) <= 0.334

Entrada

Saída

notas

media

[10,10,10]

10.0

[5, 3, 1, 9, 7]

5.0

[6.5, 9.5]

8.0

[5]

5

[6.5]

6.5

[0,1,0]

0.33333...

28 of 35

Função que calcule a média das notas de uma lista

# arquivo estatísticas.py

def media(notas):

soma = 0

contador = 0

for nota in notas:

soma += nota

contador += 1

return soma/contador

29 of 35

Exemplo 5

  • Faça um programa que lê 25 notas e as armazene em uma lista. Em seguida, imprima a maior nota digitada.

notas = []

for i in range(5):

nota = float(input("Digite a nota %d: " % (i + 1)))

notas.append(nota)

maior = notas[0]

for nota in range(1, 5):

if (notas[i] > maior):

maior = notas[i]

print("\nA maior nota foi: %.2f" % maior)

30 of 35

Exemplo 5 (com for..each)

  • Faça um programa que lê 25 notas e as armazene em uma lista. Em seguida, imprima a maior nota digitada.

notas = []

for i in range(5):

nota = float(input("Digite a nota %d: " % (i + 1)))

notas.append(nota)

maior = notas[0]

for nota in notas:

if (nota > maior):

maior = nota

print("\nA maior nota foi: %.2f" % maior)

31 of 35

TDD para fazer função que calcule a maior nota de uma lista

from estatisticas import maior

# classe de valores válidos

assert maior([1, 3, 5]) == 5

assert maior([5, 3, 1]) == 5

assert maior([5, 8, 2, 10, 1, 9]) == 10

assert maior([5]) == 5

assert maior([6.5]) == 6.5

assert maior([7.2, 9.1, 2.2]) == 9.1

Entrada

Saída

notas

maior

[1, 3, 5]

5

[5, 3, 1]

5

[5, 8, 2, 10, 1, 9]

15

[5]

5

[6.5]

6.5

[7.2, 9.1, 2.2]

9.1

32 of 35

Função que calcula a maior nota de uma lista

# arquivo estatísticas.py

...

def maior(notas):

maior = notas[0]

for nota in notas:

if (nota > maior):

maior = nota

return maior

33 of 35

Funções juntas com os testes

def maior(notas):

maior = notas[0]

for nota in notas:

if (nota > maior):

maior = nota

return maior

def media(notas):

soma = 0

contador = 0

for nota in notas:

soma += nota

contador += 1

return soma/contador

# classe de valores válidos

assert maior([1, 3, 5]) == 5

assert maior([5, 3, 1]) == 5

assert maior([5, 8, 2, 10, 1, 9]) == 10

assert maior([5]) == 5

assert maior([6.5]) == 6.5

assert maior([7.2, 9.1, 2.2]) == 9.1

# classe de valores válidos

assert media([10, 10, 10]) == 10.0

assert media([5, 3, 1, 9, 7]) == 5.0

assert media([6.5, 9.5]) == 8.0

assert media([5]) == 5.0

assert media([6.5]) == 6.5

assert 0.333 <= media([0,1,0]) <= 0.334print("passou")

34 of 35

Mutabilidade de Listas

def cresce_dois(lista):

lista.append(30)

lista.append(40)

return

# programa principal

dados = [0, 5, 10, 15]

print(dados)

cresce_dois(dados)

print(dados)

  • Diferente de variáveis primitivas, que são passadas por cópia para as funções, e onde alterações nos parâmetros dentro das funções não afetam as variáveis chamadoras, listas são passadas para funções por referência, e alterações dos parâmetros do tipo lista dentro das funções alteram as listas originais.

>> [0, 5, 10, 15]

>> [0, 5, 10, 15, 30, 40]

35 of 35

Exercícios

  1. Escreva um programa que leia 10 números inteiros e os armazene no vetor A, leia mais 10 números inteiros e os armazene no vetor B. Depois some o vetor A com o vetor B armazenando no vetor C. Imprima o vetor C.
  2. Escreva um programa que leia 30 valores inteiros positivos e armazene-os em uma lista, e calcule e imprima:
    • O menor valor da lista;
    • A quantidade de elementos da lista que são divisíveis pelo menor valor.
    • Escreva um programa que leia 200 números inteiros e armazene-os em um vetor V. Em seguida separe os elementos de V em dois vetores A e B, de forma que o vetor A contenha os elementos dos índices pares de V e B contenha os elementos dos índices ímpares de V.
    • Escreva um programa que leia 30 números inteiros e armazene-os em uma lista A e leia também um inteiro n. Em seguida seu programa deve procurar o valor n em A e imprimir a posição em que este aparece. Se o elemento não estiver no vetor, o programa deve imprimir uma mensagem indicando que o elemento não pertence ao vetor.