Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

Python 3.x 
Tipos de Dados 
Tuplas 
Dicionários 
Introdução à Ciência da Computação 
 
Prof. Edison Ishikawa 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Sumário 
• Tuplas 
• Uso 
• Imutabilidade 
• Sintaxe 
• Fatiamento 
• Atribuição 
• Empacotando 
• Desempacotando 
• Valor de retorno 
• Composição de 
Estrutura de Dados 
• Dicionários 
• O que é 
• Hashing 
• Operações 
• Métodos 
• Apelidos e cópia 
• Dicas 
• Matrizes esparsas 
• Inteiros longos 
• Contando letras 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Tuplas 
• Estrutura de Dados 
• Mecanismo para agrupar e organizar dados facilitando o 
seu uso 
 
 
 
• Generalizando, uma tupla pode ser usada para agrupar 
qualquer número de itens em um único valor composto 
 
 D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo: o par nome/ano é um exemplo de tupla 
ano_nascimento = (“Darcy Ribeiro”, 1922) 
Exemplo 
data_nascimento = (“Darcy Ribeiro”, 26, 10, 1922) 
Imutabilidade e tuplas 
• Revisão: listas são mutáveis, strings não! 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo lista 
>>> lista = ["a", "b", "c", "d"] 
>>> type(lista) 
<class 'list'> 
>>> lista[3]="X" 
>>> lista 
['a', 'b', 'c', 'X'] 
Exemplo string 
>>> palavra="string" 
>>> type(palavra) 
<class 'str'> 
>>> palavra[4] 
'n' 
>>> palavra[4]="X" 
Traceback (most recent call last): 
 File "<pyshell#9>", line 1, in <module> 
 palavra[4]="X" 
TypeError: 'str' object does not support item assignment 
Imutabilidade e tuplas 
• Tuplas são similares a listas, porém imutáveis. 
• Sintaticamente, uma tupla é uma coleção de valores 
separados por vírgulas. 
 
 
 
 
 
 
 
 
 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> t1 = "a", "b", "c", "d" 
>>> type(t1) 
<class 'tuple'> 
>>> t1 
('a', 'b', 'c', 'd') 
>>> t1[2] 
'c' 
>>> t1[2]="Y" 
Traceback (most recent call last): 
 File "<pyshell#16>", line 1, in <module> 
 t1[2]="Y" 
TypeError: 'tuple' object does not support item assignment 
Tuplas - sintaxe 
• Note que o uso dos parênteses é opcional! 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 1 
>>> tupla1 = 'a', 'b', 'c', 'd' 
>>> type(tupla1) 
<class 'tuple'> 
>>> tupla1 
('a', 'b', 'c', 'd') 
Exemplo 2 
>>> tupla2 = ('a', 'b', 'c', 'd‘) 
>>> type(tupla2) 
<class 'tuple'> 
>>> tupla2 
('a', 'b', 'c', 'd') 
Tuplas - sintaxe 
• Para criar uma tupla com apenas 1 elemento, coloque a 
vírgula, caso contrário será uma string 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo certo de criação de tupla 
>>> tupla = ('a',) 
>>> type(tupla) 
<class 'tuple'> 
>>> tupla 
('a',) 
Exemplo errado 
>>> tupla = ('a') 
>>> type(tupla) 
<class ‘string'> 
>>> tupla 
'a' 
Note a vírgula 
Fatiando tuplas 
• Sintaxe 
• tupla[x:y] – seleciona elementos de x a y-1: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> tupla = ('a', 'b', 'c', 'd', 'e', 'f') 
>>> tupla[1:4] 
('b', 'c', 'd') 
>>> tupla[0:2] 
('a', 'b') 
>>> tupla[2:] 
('c', 'd', 'e', 'f') 
>>> tupla[:4] 
('a', 'b', 'c', 'd') 
Imutabilidade e tuplas 
• Apesar de não podermos modificar os elementos, 
podemos substituí-la por uma tupla diferente. 
 
 
 
 
 
 
 
• Note que usamos o range e a operação de 
concatenação para forjar uma “modificação” de elemento 
através da substituição. 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> tupla = ("verdade", "significado", 77) 
>>> tupla[0:2] 
('verdade', 'significado') 
>>> tupla = tupla[0:2] + ("semântica",) 
>>> tupla 
('verdade', 'significado', 'semântica') 
Os valores podem 
ter tipos diferentes! 
Note a vírgula! 
Atribuições com tupla 
• Permite que uma tupla de variáveis à esquerda da 
atribuição receber valores de uma tupla à direita da 
atribuição 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> julia = ("Julia", "Roberts", 1967, "Pretty Woman", 1990, "Atriz", "Atlanta, 
Georgia") 
>>> (nome, sobrenome, ano_nascimento, filme, ano_filme, profissao, 
local_nascimento) = julia 
>>> nome 
'Julia' 
>>> sobrenome 
'Roberts' 
>>> ano_nascimento 
1967 
>>> filme 
'Pretty Woman' 
7 atribuições em uma linha! 
Único requisito: número de variáveis 
a esquerda tem que ser igual ao 
número de elementos da tupla 
Empacotando e 
Desempacotando 
• Outra forma de encarar as tuplas 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo: empacotando 
>>> bob = (“Bob”, 19, “ICC”) 
Exemplo: desempacotando 
>>> bob = (“Bob”, 19, “ICC”) 
>>>(nome, idade, estuda) = bob 
>>>estuda 
‘ICC’ 
Atribuições com tupla 
• Trocar entre si os valores de duas variáveis: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo com variável temporária 
>>> a = 1 
>>> b = 2 
>>> a, b 
(1, 2) 
>>> tmp = a 
>>> a = b 
>>> b = tmp 
>>> a, b 
(2, 1) 
Exemplo com tupla 
>>> a, b = 1, 2 
>>> a, b 
(1, 2) 
>>> a, b = b, a 
>>> a, b 
(2, 1) 
Necessário o uso de 
variável temporária. 
Simplifica tanto a atribuição quanto 
a troca de elementos! 
Tuplas como valores de retorno 
• Funções podem usar tuplas como valor de retorno. 
• Então podemos atribuir o valor a uma tupla com a 
mesma quantidade de variáveis: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> import math 
>>> def func2grau(a, b, c): 
 delta = b**2 -4*a*c 
 x1 = (-b-math.sqrt(delta))/(2*a) 
 x2 = (-b+math.sqrt(delta))/(2*a) 
 return x1, x2 
 
>>> x1, x2 = func2grau(1, -5, 6) 
>>> x1, x2 
(2.0, 3.0) 
Composição de 
Estruturas de Dados 
• Lista de pares (tuplas com dois elementos), sendo que o 
segundo elemento da tupla também é uma lista 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo: 
 aluno = [ 
 (“João”, [“ICC”, “Cálculo 1”, “Física 1”]), 
 (“Maria”, [“ICC”, “Química”, “Estatística”, “Álgebra”]), 
 (“José” , [“ICC”, “Estrutura de Dados”]) ] 
Composição de 
Estruturas de Dados 
• Os itens de uma tupla também podem ser tuplas 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> julia = ( ("Julia", "Roberts“) , (8, “outubro”, 1967), "Atriz", "Atlanta - GA“, 
 [ (“Duplicity”, 2009), 
 (“Notting Hill”, 1999), 
 (“Pretty Woman”,1990), 
 (“Erin Brockovich”, 2000), 
 (“Eat Pay Love”, 2010), 
 (“Mona Lisa Smile”, 2003), 
 (“Oceans Twelve”, 2004), 
 (“Larry Crowne”, 2011), 
 (“August: Osage County”, 2013), 
 (“Mother´s Day”, 2016) ] ) 
Note que a tupla só tem 5 elementos! 
Mas cada elemento pode ser: outra tupla, uma lista, uma string, etc 
É uma estrutura de dados heterogênea! 
Dicionários 
• As tipos compostos que já estudamos são: 
• Strings 
• Listas e 
• Tuplas 
• Todas elas são do tipo sequenciais 
• Usam inteiros como índices para acessar seus valores 
 
• Dicionários são um outro tipo de composição 
• Tipo mapeado 
• Mapeiam chaves para valores 
• Chave é qualquer tipo imutável 
• Valor pode ser qualquer tipo (heterogêneo) 
• Também conhecidos como vetores associativos 
• Associam uma chave a um valor 
 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Dicionário inglês-português 
• Exemplo: cria-se um dicionário em Python para traduzir 
palavras do inglês para o português 
• As chaves são strings 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> ingles_portugues = { } 
>>> ingles_portugues[“computer”] = “computador” 
>>> ingles_portugues[“assignment”] = “atribuição” 
>>> ingles_portugues[“alias”] = “apelido” 
>>> ingles_portugues 
 
{“alias”: “apelido” , “assignment”: “atribuição”, “computer”: 
“computador” } 
Cria dicionário vazio 
Em seguia adiciona 
os elementos 
Note que a ordem está diferente... 
Dicionários 
• Outra maneira de criar dicionários é fornecer uma lista 
de pares chaves-valor utilizando a mesma sintaxe da 
última saída. 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> ing2port = { “one”: ”um”, “two”:”dois”, “three”:”três” } 
Dicionários 
• Os pares chave-valor não estão em ordem! 
• Felizmente, não há motivos para se preocupar com a 
ordem, desde que os elementos do dicionário nunca 
sejam indexados com índices inteiros. 
• Podemos usar as chaves para buscar os valores 
correspondentes: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> ing2port = { “one”: ”um”, “two”:”dois”, “three”:”três” } 
>>>ing2port[“two”] 
‘dois’ 
Hashing 
• A ordem dos pares pode ser diferente do esperado 
• Python usa algoritmos complexos para determinar onde 
o par chave:valor está armazenado no dicionário 
• Por que usar dicionários quando se pode usar o mesmo 
conceito de mapear chaves em valores usando lista com 
tuplas? 
 
 
 
 
• Dicionários são rápidos 
• Listas são lentas 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>>{ “maçã”: 130, “pera”: 50, “banana”: 10 } 
>>>[ (‘maçã’, 1300), (“pera”, 50), (“banana”, 10 ) ] 
Operações 
• O comando del remove um par chave-valor de um 
dicionário. 
• Por exemplo, o dicionário abaixo contém os nomes de 
várias frutas e o número de cada fruta no estoque 
 
 
 
 
• Se alguém comprar todas as bananas, podemos excluir 
a entrada do dicionário: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>>estoque = { “maçã”: 130, “pera”: 50, “banana”: 10 } 
>>> print(estoque) 
{'pera': 50, 'banana': 10, 'maçã': 130} 
Exemplo 
>>> del estoque["banana"] 
>>> print(estoque) 
{'pera': 50, 'maçã': 130} 
Operações 
• Mas se o estoque de bananas for recompletado logo 
 
 
 
 
• Quando chegar novo carregamento de banana... 
 
 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> estoque["banana"] = 0 
>>> print(estoque) 
{'pera': 50, 'banana': 0, 'maçã': 130} 
Exemplo 
>>> estoque["banana"] = 750 
>>> print(estoque) 
{'pera': 50, 'banana': 750, 'maçã': 130} 
Operações 
• E para saber quantos itens (par chave:valor) tem no 
estoque 
 
 
 
 
• O operador in e not in (usado também em strings e 
listas) é um operador lógico que verifica se uma chave 
está no dicionário 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> len(estoque) 
3 
Exemplo 
>>> “banana” in estoque 
True 
>>>”jaboticaba” not in estoque 
True 
Métodos 
• Um método é semelhante a uma função: possui 
parâmetros e retorna valores, mas a sintaxe é diferente 
• Por exemplo, o método keys recebe um dicionário e 
retorna uma lista com as chaves, mas em vez de 
usarmos a sintaxe de função keys(estoque), nós usamos 
a sintaxe de método sing2esp.keys() 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> estoque.keys() 
dict_keys(['pera', 'banana', 'maçã']) 
objeto método ponto 
Métodos 
• Ao invés de chamarmos um método, dizemos que ele é 
invocado, nesse caso, nós podemos dizer que nós 
estamos invocando keys do objeto estoque 
• O método values é parecido; retorna a lista de valores 
de um dicionário 
 
 
 
• O método items retorna a dupla, na forma de uma lista 
com os pares 
• Os colchetes indicam que isso é uma lista 
• Os parênteses indicam que os elementos da lista são 
tuplas. 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> estoque.values() 
dict_values([50, 0, 130]) 
Exemplo 
>>> estoque.items() 
dict_items([('pera', 50), ('banana', 0), ('maçã', 130)]) 
Métodos 
• O método keys retorna a lista da chave, logo podemos 
usá-lo para percorrer o dicionário 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
for key in estoque.keys(): # a ordem da chave não está definida 
 print("Quantidade de ", key, “ no estoque é igual a ", estoque[key]) 
 
keys = list(estoque.keys()) 
print(keys) 
Saída: 
Quantidade de pera no estoque é igual a 50 
Quantidade de banana no estoque é igual a 0 
Quantidade de maçã no estoque é igual a 130 
['pera', 'banana', 'maçã'] 
Métodos 
• Iterar sobre uma chave de um dicionário é algo tão 
comum que se pode omitir a invocação do método no 
loop for 
• Iterar sobre um dicionário subentende-se iterar sobre a 
chave 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
for chave in estoque: # a ordem da chave não está definida 
 print("Quantidade de ", chave, “ no estoque é igual a ", 
estoque[chave]) 
 
Saída: 
Quantidade de pera no estoque é igual a 50 
Quantidade de banana no estoque é igual a 0 
Quantidade de maçã no estoque é igual a 130 
Métodos 
• Tuplas também são frequentemente usadas na iteração 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
for (chave, valor) in estoque.items(): 
 print("Quantidade de ", chave, “ no estoqueé igual a ", valor) 
 
Saída: 
Quantidade de pera no estoque é igual a 50 
Quantidade de banana no estoque é igual a 0 
Quantidade de maçã no estoque é igual a 130 
Aliasing e Copiar 
• Aliasing é um recurso no qual duas variáveis 
referenciam a um mesmo objeto 
• Quando uma é alterada, a outra também é afetada. 
• Se você quer modificar um dicionário e manter uma 
cópia original, então o método copy deve ser utilizado. 
• oposto é um dicionário de antônimos 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>>oposto = { “alto”: ”baixo”, “direito”: “errado”, “sim”: “não” } 
>>>contrario = oposto 
>>>antonimo = oposto.copy( ) 
>>> id(oposto) 
49156704 
>>> id(contrario) 
49156704 
>>> id(antonimo) 
48899536 
Aliasing e Copiar 
• oposto e contrario (apelido) se referem ao mesmo 
objeto 
• antonimo (cópia) se refere a um novo objeto igual ao 
dicionário oposto 
• Se você modificar o contrario, oposto também será 
alterado 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>>oposto = { “alto”: ”baixo”, “direito”: “errado”, “sim”: “não” } 
>>>contrario = oposto 
>>>antonimo = oposto.copy( ) 
>>>>>> contrario["direito"] = "esquerdo" 
>>> oposto["direito"] 
'esquerdo' 
Aliasing e Copiar 
• Se você modificar o antonimo, oposto não será 
alterado 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>>oposto = { “alto”: ”baixo”, “direito”: “errado”, “sim”: 
“não” } 
>>>contrario = oposto 
>>>antonimo = oposto.copy( ) 
>>>>>> antonimo["direito"] = “deveres" 
>>> oposto["direito"] 
‘errado' 
 
Matrizes Esparsas 
• Seja a matriz esparsa 
 
 
 
 
• Uma representação usando uma lista contém muitos 
zeros 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Matrizes Esparsas 
• Uma alternativa é usarmos um dicionário. Para as 
chaves, nós podemos usar tuplas que contêm os 
números da linha e a coluna 
 
 
 
• Para se acessar um elemento da matriz, utiliza-se o 
operador [ ]: 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo: 
>>>matriz = { (0, 3): 1, (2, 1): 2, (4, 3): 3 } 
Exemplo 
>>>matriz[2, 1] 
2 
Matrizes Esparsas 
• A sintaxe da representação de um dicionário não é a 
mesma das listas 
• Apenas um índice é usado 
• tupla de dois inteiros ao invés de dois inteiros 
• Porém, se buscarmos um elemento zero, um erro será 
gerado 
• não existe entrada no dicionário para a palavra especificada 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> matriz[1, 1] 
Traceback (most recent call last): 
 File "<pyshell#147>", line 1, in <module> 
 matriz[1, 1] 
KeyError: (1, 1) 
Matrizes Esparsas 
• O método get resolve este problema 
 
 
 
 
 
• O primeiro parâmetro é a chave 
• O segundo é o valor que get retornará caso não exista a 
chave no dicionário 
• get melhora a semântica e a sintaxe do acesso a 
matrizes esparsas 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
>>> matriz.get((2,1), 0) 
2 
>>> matriz.get((1,1), 0) 
0 
Dica 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
A recursão gera uma árvore com 
números de nós exponencial! 
 
Como evitar isto? 
Dica 
• Podemos guardar os valores que já foram calculados 
armazenando-os em um dicionário 
• Desta forma estes valores podem ser utilizados em uma 
outra oportunidade 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
previo = {0:1, 1:1} 
 
def fibonacci(n): 
 if n in previo: 
 return previo[n] 
 else: 
 novoValor = fibonacci(n-1) + 
fibonacci(n-2) 
 previo[n] = novoValor 
 return novoValor 
 
print(fibonacci(64)) 
Saída 
17167680177565 
Contando letras 
• Um histograma pode ser útil para comprimir um arquivo 
de texto. 
• Dicionários fornecem uma maneira elegante de gerar um 
histograma 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
contador_letras = {} 
for letra in "Universidade de Brasilia": 
 contador_letras[letra] = contador_letras.get(letra, 0) + 1 
 
print(contador_letras) 
Saída 
{'U': 1, 'i': 4, 'v': 1, 'n': 1, 'a': 3, 'r': 2, 'e': 3, 'd': 3, ' ': 2, 's': 2, 
'l': 1, 'B': 1} 
Contando letras 
• É mais atraente mostrarmos o histograma na ordem 
alfabética 
• Podemos fazer isso com os métodos items e sort 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
contador_letras = {} 
for letra in "Universidade de Brasilia": 
 contador_letras[letra] = contador_letras.get(letra, 0) + 1 
 
letras_items = list(contador_letras.items()) 
letras_items.sort() 
print(letras_items) 
Saída 
[(' ', 2), ('B', 1), ('U', 1), ('a', 3), ('d', 3), ('e', 3), ('i', 4), ('l', 1), 
('n', 1), ('r', 2), ('s', 2), ('v', 1)] 
Contando letras 
• Você já tinha visto o método items 
antes, mas sort é o primeiro método 
que você se depara para aplicar em 
listas 
• Existem muitos outros métodos de 
listas, incluindo append, extend, e 
reverse 
• Consulte a documentação do 
Python para maiores detalhes 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exercício 
• Escreva um programa em Python chamado palavras_alice.py 
que cria um arquivo texto chamado palavras_alice.txt 
contendo a lista alfabética de todas as palavras e o número de 
vezes em que ela aparece no texto da versão “Alice´s 
Adventures in Wonderland” 
• Obtenha o arquivo em http://www.gutenberg.org utf-8 sem 
formatação 
• As primeiras 10 linhas do seu arquivo de saída deve ser 
parecido com 
 
 
 
 
 
 
 
• Quantas veze a palavra alice aparece no texto? 
• Qual é a palavra mais longa? Qual o seu tamanho? 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o
 
Exemplo 
Palavra Contagem 
=============================== 
a 631 
a-piece 1 
abide 1 
able 1 
about 94 
above 3 
Bibliografia 
• How to Think Like a Computer Scientist: Learning 
with Python 3 – Documentation - Release 3rd Edition 
• Peter Wentworth, Jeffrey Elkner,Allen B. Downey and 
Chris Meyers 
• Apr 26, 2017 
D
e
p
a
rt
a
m
e
n
to
 d
e
 C
iê
n
c
ia
 d
a
 C
o
m
p
u
ta
ç
ã
o

Mais conteúdos dessa disciplina