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

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 Djangofabiocerqueira
 
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Álvaro Justen
 
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 alvesGrupython 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 tkVictor Marcelino
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
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 web2pyGilson Filho
 
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 PythonGiancarlo Silva
 
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Álvaro Justen
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 
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ômatosTárcio Sales
 
Python no Celular
Python no CelularPython no Celular
Python no Celulariuridiniz
 
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 PythonAlvaro Oliveira
 
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 TkCarlos Campani
 
C++ apostila c++ nivel basico
C++   apostila c++ nivel basicoC++   apostila c++ nivel basico
C++ apostila c++ nivel basicorobinhoct
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaÁlvaro Justen
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 
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
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 
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++Ivan Ricarte
 

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++
 

Listas, Dicionários e Sets - Estruturas de Dados em Python