Listas e Vetores
Motivação
Listas/Vetores
Ilustração de uma lista/vetor
numeros
0
1
2
3
4
5
6
Inicialização de uma lista/vetor
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']
Acesso aos elementos de uma lista
Exemplos:
numeros[3] = 15
print(numeros)
>> [4, 5, 7, 15, 9, 5]
numeros[0] = int(input())
#Supondo que o usuário digitou 30
print(numeros)
>> [30, 5, 7, 15, 9, 5]
E se acessamos uma posição que não existe?
numeros = [30, 5, 7, 15, 9, 5]
print(numeros[3])
15
print(numeros[7])
Traceback (most recent call last):� File "<pyshell#11>", line 1, in <module>� print(num[7])�IndexError: list index out of range
Adicionando novos elementos a uma lista
numeros = [30, 5, 7, 15, 9, 5]
numeros.append(40)
print(numeros)
>> [30, 5, 7, 15, 9, 5, 40]
numeros.insert(1, 500)
print(numeros)
>> [30, 500, 5, 7, 15, 9, 5, 40]
Removendo elementos de uma lista
numeros = [30, 500, 5, 7, 15, 9, 5, 40]
numeros.remove(5)
print(numeros)
>> [30, 500, 7, 15, 9, 5, 40]
x = numeros.pop(3)
print(numeros)
>> [30, 500, 7, 9, 5, 40]
print(x)
>> 15
Acesso aos elementos de uma lista
Mais Exemplos:
print(numeros[5])
print(numeros[x])
print(numeros[x+2])
x = 3
numeros[x] = 20
x = 5
numeros[x] = 32
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.
Acesso aos elementos de uma lista
Exemplo:
lista = []
lista
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
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
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
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
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
Exemplo 1
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])
A faixa de valores da lista é conhecida
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])
Às vezes, é mais simples iterar com for..each
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)
Exemplo 2
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])
Exemplo 3
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])
Exemplo 3 (com for..each)
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)
Exemplo 3 (com try...except)
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])
Exemplo 4
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])
Exemplo 4 (com for..each)
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)
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... |
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
Exemplo 5
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)
Exemplo 5 (com for..each)
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)
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 |
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
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")
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)
>> [0, 5, 10, 15]
>> [0, 5, 10, 15, 30, 40]
Exercícios