Iterador (Python)

Què és un iterador en Python? Explicació clara sobre com funciona, diferència amb un iterable, exemples pràctics amb conjunts, llistes i generadors.

« Back to Glossary Index

Definició: En Python, un iterador és un objecte que permet recórrer una seqüència d’elements d’un en un. Cada vegada que s’aplica la funció next(), l’iterador retorna el següent element. Quan no en queden més, llença l’excepció StopIteration.

Iterador vs. Iterable

  • Iterable: objecte que pot proporcionar un iterador amb iter() (per exemple, list, tuple, set, dict).
  • Iterador: objecte retornat per iter() i consumit per next().
fruits = ["poma", "plàtan", "cirera"]

# obtenim un iterador
it = iter(fruits)

print(next(it))  # poma
print(next(it))  # plàtan
print(next(it))  # cirera
print(next(it))  # StopIteration (quan s'acaben els elements)

Característiques principals

  • Els iteradors recorden la posició actual dins de la seqüència.
  • Només es poden recórrer una vegada; un cop consumits, cal crear-ne un de nou.
  • Són ideals per treballar amb grans conjunts de dades o fluxos infinits (gràcies a la generació sota demanda).

Com crear un iterador propi

Pots crear una classe que implementi els mètodes especials __iter__() i __next__():

class Comptador:
    def __init__(self, limit):
        self.limit = limit
        self.count = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.limit:
            self.count += 1
            return self.count
        else:
            raise StopIteration

for num in Comptador(3):
    print(num)
# 1, 2, 3

Relació amb generadors

Els generadors són una manera senzilla de crear iteradors utilitzant la paraula clau yield:

def comptar(limit):
    for i in range(1, limit + 1):
        yield i

for n in comptar(3):
    print(n)

Errors comuns i bones pràctiques

  • Consum accidental: un iterador no es pot “reiniciar”; crea’n un de nou amb iter() si cal tornar a començar.
  • Excepció StopIteration: indica que s’han acabat els elements, no és un error real.
  • Iteració segura: els bucles for gestionen automàticament StopIteration.

Vegeu també

  • Iterable (Python): objecte capaç de proporcionar un iterador amb iter().
  • Generador (Python): funció que crea iteradors de forma més simple amb yield.
  • Conjunt (set): estructura iterable que pot convertir-se en iterador.
« Back to Glossary Index