Diferència entre revisions de la pàgina «Col·leccions i iteradors»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «== Introducció == * Una '''col·lecció''' és un conjunt d'objectes que es poden recórrer. No especifiquem la manera en com està organitzada l'estructura de dades (po…».)
 
Línia 9: Línia 9:
  
 
En el cas de Python per tal de crear una classe iterable cal implementar els mètodes:
 
En el cas de Python per tal de crear una classe iterable cal implementar els mètodes:
* __iter__()
+
* __iter__() : retorna un element iterable
* next()
+
* next() : l'element iterable implementa aquest mètode per passar al següent element.
 +
Per exemple, una llista implementa iteradors. Si examinem els mètodes implementats a la llista:
 +
>>> dir(list)
 +
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__',
 +
  '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__',
 +
  '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', ''''__iter__'''', '__le__', '__len__',
 +
  '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 +
  '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__',
 +
  '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop',
 +
  'remove', 'reverse', 'sort']
 
<br>
 
<br>
  

Revisió del 19:24, 1 gen 2013

Introducció

  • Una col·lecció és un conjunt d'objectes que es poden recórrer. No especifiquem la manera en com està organitzada l'estructura de dades (pot ser una llista, vector, hash table, arbre, etc). És, per tant, una generalització del concepte d'estructura de dades.
  • Un iterador defineix una interfície amb uns mètodes que permeten accedir als elements d'una col·lecció. Els típics mètodes son:
    • Primer()
    • Ultim()
    • Seguent()
    • Anterior()
    • ...

En el cas de Python per tal de crear una classe iterable cal implementar els mètodes:

  • __iter__() : retorna un element iterable
  • next() : l'element iterable implementa aquest mètode per passar al següent element.

Per exemple, una llista implementa iteradors. Si examinem els mètodes implementats a la llista:

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__',
 '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__',
 '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__',
 '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__',
 '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop',
 'remove', 'reverse', 'sort']


Iteradors implícits

Qualsevol bucle tipus "foreach" (p.ex. en PHP) utilitza el patró iterador. En Python ho solem fer al recórrer llistes:

for element in llista:
    print element

"element" cada cop serà un objecte de la llista i en cada iteració avançarem fins el següent element. Encara que no ens adonem, estem utilitzant un objecte iterador de la llista que cada volta avança cap a next().

Iteradors explícits

Una altra manera de recórrer els elements és amb un iterador explícit. Ho podem veure en el següent exemple. Enlloc d'un for ho farem amb un while: