Listas, Dicionários, Setse outras Bestas Mitológicas --- Adriano Petrich
O(n)?
Listas
Prós:  Fantásticas
Listasl = []
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
ListasSe comportam como RAM porque sãomodeladas da mesma forma
CriaçãoUsa 20 bytes de overhead (classe, len,tamanho da alocação e posição)
masUma lista vazia não tem memória alocadapara os dados.
Quandol.append(1)
Acontece a AlocaçãoAloca espaço para 4 elementosQuando chega em 4 aloca espaço para 8 ecopia os 4Depois 16
E assim por diante
Ou Quase25, 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
Alternativafrom collections import dequedeque()
DequesDouble Ended QUEueInternamente é uma lista ligada duplaPrósFilas FIFO e não muito mais
De volta aslistas
foo in L é O(n)
Alternativasset()
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 naHashtable
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 ...
Dicionários não temordemTem sim! A ordem da hashtable >>> {a:1, j:4, b:2}.keys() [a, j, b] >>> {a:1, j:4, b:2}.values() [1...
Existem bem maissutilezasVídeo da pycon 2010: the might dictionary
Sets
SetsImplementação igual dos dicionários sóque sem o valor.Então:
foo in s é O(1)
Grafos
A   BC   D
A   BC   D
Duas formasa,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...
2A       B3   4C   5   D
passe para dicionáriosn = { a:   {b:2, c:3},      b:   {c:4},      c:   {d:5},      d:   {}}
Créditoshttp://www.flickr.com/photos/autumn_bliss/414160195http://www.flickr.com/photos/autumn_bliss/414160148
Dúvidas?@fractal+Adriano Petrich[codando.com.br, sfp.adrianopetrich.com,blog.adrianopetrich.com]
python: Listas, deques, Dicionarios e outros monstros mitologicos
Próximos SlideShares
Carregando em…5
×

python: Listas, deques, Dicionarios e outros monstros mitologicos

1.598 visualizações

Publicada em

Uma visita no que esta debaixo do capô de quando usamos listas, dicionarios e tal em python

Publicada em: Tecnologia
  • Seja o primeiro a comentar

python: Listas, deques, Dicionarios e outros monstros mitologicos

  1. 1. Listas, Dicionários, Setse outras Bestas Mitológicas --- Adriano Petrich
  2. 2. O(n)?
  3. 3. Listas
  4. 4. Prós: Fantásticas
  5. 5. Listasl = []
  6. 6. L.append(foo) é O(1)
  7. 7. L.pop() é O(1)
  8. 8. TáIsso não é tão fantástico
  9. 9. L[foo] = bar, L[foo] O(1)
  10. 10. Isso sim é fantástico
  11. 11. meh
  12. 12. ListasSe comportam como RAM porque sãomodeladas da mesma forma
  13. 13. CriaçãoUsa 20 bytes de overhead (classe, len,tamanho da alocação e posição)
  14. 14. masUma lista vazia não tem memória alocadapara os dados.
  15. 15. Quandol.append(1)
  16. 16. Acontece a AlocaçãoAloca espaço para 4 elementosQuando chega em 4 aloca espaço para 8 ecopia os 4Depois 16
  17. 17. E assim por diante
  18. 18. Ou Quase25, 35, 46, 58, 72, 88
  19. 19. L.append(foo) é O(1)
  20. 20. Here be monsters
  21. 21. Cons
  22. 22. L.pop(0) é O(n)
  23. 23. L.pop(0) é O(n)-ish
  24. 24. Alternativafrom collections import dequedeque()
  25. 25. DequesDouble Ended QUEueInternamente é uma lista ligada duplaPrósFilas FIFO e não muito mais
  26. 26. De volta aslistas
  27. 27. foo in L é O(n)
  28. 28. Alternativasset()
  29. 29. Dicionários
  30. 30. Dicionários?>>> d = {}>>> d[a] = 1
  31. 31. Interlúdio>>> hash(a)12416037344>>> bin(hash(a)0b1011100100000011011011000111100000
  32. 32. Hashtable
  33. 33. Hash a>>> hash(a)12416037344>>> bin(hash(a)...000
  34. 34. Hashtable
  35. 35. Hash b>>> d[b] = 2>>> hash(b)12544037731>>> bin(hash(b)...011
  36. 36. Hashtable
  37. 37. Hash c>>> d[c] = 3>>> hash(c)12672038114>>> bin(hash(c)...010
  38. 38. Hashtable
  39. 39. Hash j>>> d[j] = 4>>> hash(j)13568040811>>> bin(hash(j)...011
  40. 40. Enquanto isso naHashtable
  41. 41. Outra vez na Hashtable
  42. 42. 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 == d2True
  43. 43. Dicionários não temordemTem 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]
  44. 44. Existem bem maissutilezasVídeo da pycon 2010: the might dictionary
  45. 45. Sets
  46. 46. SetsImplementação igual dos dicionários sóque sem o valor.Então:
  47. 47. foo in s é O(1)
  48. 48. Grafos
  49. 49. A BC D
  50. 50. A BC D
  51. 51. Duas formasa,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
  52. 52. Ou n = { a: set(bc), b: set(c), c: set(d), d: set()}Python Patterns implementing graphs--Guido van Rossum
  53. 53. 2A B3 4C 5 D
  54. 54. passe para dicionáriosn = { a: {b:2, c:3}, b: {c:4}, c: {d:5}, d: {}}
  55. 55. Créditoshttp://www.flickr.com/photos/autumn_bliss/414160195http://www.flickr.com/photos/autumn_bliss/414160148
  56. 56. Dúvidas?@fractal+Adriano Petrich[codando.com.br, sfp.adrianopetrich.com,blog.adrianopetrich.com]

×