SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
Listas, Dicionários, Sets




e outras Bestas Mitológicas --- Adriano Petrich
O(n)?
Listas
Prós:
  Fantásticas
Listas
l = []
L.append(foo) é O(1)
L.pop() é O(1)
Tá
Isso não é tão fantástico
L[foo] = bar, L[foo] O(1)
Isso sim é fantástico
meh
Listas
Se comportam como RAM porque são
modeladas da mesma forma
Criação
Usa 20 bytes de overhead (classe, len,
tamanho da alocação e posição)
mas
Uma lista vazia não tem memória alocada
para os dados.
Quando
l.append(1)
Acontece a Alocação
Aloca espaço para 4 elementos
Quando chega em 4 aloca espaço para 8 e
copia os 4
Depois 16
E assim por diante
Ou Quase
25, 35, 46, 58, 72, 88
L.append(foo) é O(1)
Here be monsters
Cons
L.pop(0) é O(n)
L.pop(0) é O(n)-ish
Alternativa
from collections import deque
deque()
Deques
Double Ended QUEue
Internamente é uma lista ligada dupla

Prós
Filas FIFO e não muito mais
De volta as
listas
foo in L é O(n)
Alternativas
set()
Dicionários
Dicionários?
>>> d = {}
>>> d['a'] = 1
Interlúdio
>>> hash('a')
12416037344
>>> bin(hash('a')
'0b1011100100000011011011000111100000'
Hashtable
Hash 'a'
>>> hash('a')
12416037344
>>> bin(hash('a')
'...000'
Hashtable
Hash 'b'
>>> d['b'] = 2
>>> hash('b')
12544037731
>>> bin(hash('b')
'...011'
Hashtable
Hash 'c'
>>> d['c'] = 3
>>> hash('c')
12672038114
>>> bin(hash('c')
'...010'
Hashtable
Hash 'j'
>>> d['j'] = 4
>>> hash('j')
13568040811
>>> bin(hash('j')
'...011'
Enquanto isso na
Hashtable
Outra vez na Hashtable
Duas coisas
>>> d1 = {'a':1,   'j':4, 'b':2}
>>> d2 = {'a':1,   'b':2, 'j':4}
>>> d1
{'a': 1, 'j': 4,   'b': 2}
>>> d2
{'a': 1, 'b': 2,   'j': 4}
>>> d1 == d2
True
Dicionários não tem
ordem
Tem sim! A ordem da hashtable

 >>> {'a':1, 'j':4, 'b':2}.keys()
 ['a', 'j', 'b']
 >>> {'a':1, 'j':4, 'b':2}.values()
 [1, 4, 2]
Existem bem mais
sutilezas
Vídeo da pycon 2010: the might dictionary
Sets
Sets
Implementação igual dos dicionários só
que sem o valor.
Então:
foo in s é O(1)
Grafos
A   B


C   D
A   B


C   D
Duas formas
a,b,c,d = range(4)
n = [[0,1,1,0],
     [0,0,1,0],
     [0,0,0,1],
     [0,0,0,0]]

>>> n[a][b]
1
Ou
 n = { 'a':   set('bc'),
       'b':   set('c'),
       'c':   set('d'),
       'd':   set()}

Python Patterns implementing   graphs
--Guido van Rossum
2
A       B
3   4

C   5   D
passe para dicionários
n = { 'a':   {'b':2, 'c':3},
      'b':   {'c':4},
      'c':   {'d':5},
      'd':   {}}
Créditos
http://www.flickr.com/photos/autumn_bliss/414160195
http://www.flickr.com/photos/autumn_bliss/414160148
Dúvidas?
@fractal
+Adriano Petrich
[codando.com.br, sfp.adrianopetrich.com,
blog.adrianopetrich.com]

Mais conteúdo relacionado

Destaque

Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
Grupython Ufla
 
14 programando em python - interfaces graficas com tk
 14   programando em python - interfaces graficas com tk 14   programando em python - interfaces graficas com tk
14 programando em python - interfaces graficas com tk
Victor Marcelino
 
C++ apostila c++ nivel basico
C++   apostila c++ nivel basicoC++   apostila c++ nivel basico
C++ apostila c++ nivel basico
robinhoct
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Flávio Freitas
 

Destaque (20)

Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
Arduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware LivreArduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware Livre
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
14 programando em python - interfaces graficas com tk
 14   programando em python - interfaces graficas com tk 14   programando em python - interfaces graficas com tk
14 programando em python - interfaces graficas com tk
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
Arduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresArduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware Livres
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
 
Python no Celular
Python no CelularPython no Celular
Python no Celular
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
C++ apostila c++ nivel basico
C++   apostila c++ nivel basicoC++   apostila c++ nivel basico
C++ apostila c++ nivel basico
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira Pythônica
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

python: Listas, deques, Dicionarios e outros monstros mitologicos