Puedes ejecutar cualquier ejemplo de esta guía directamente en nuestra consola interactiva: Abrir consola de Python →
Iteradores en Python: cómo funcionan y cómo crearlos
Los iteradores son objetos que permiten recorrer elementos uno a uno. Python usa iteradores internamente en listas, tuplas, diccionarios, generadores y más. En esta guía aprenderás a usar iter(), next() y a crear tus propios iteradores.
Tabla de contenidos
1. ¿Qué es un iterador?
Un iterador es un objeto que implementa los métodos __iter__() y __next__().
lista = [1, 2, 3]
it = iter(lista)
print(next(it))
2. iter() y next()
iter() convierte un iterable en un iterador. next() devuelve el siguiente elemento.
texto = "Python"
it = iter(texto)
print(next(it))
print(next(it))
3. Iterables vs iteradores
- Iterable: se puede recorrer (listas, strings, tuplas).
- Iterador: devuelve elementos uno a uno.
lista = [1, 2, 3]
it = iter(lista) # iterador
4. Crear un iterador propio
class Contador:
def __init__(self, limite):
self.limite = limite
self.actual = 0
def __iter__(self):
return self
def __next__(self):
if self.actual < self.limite:
self.actual += 1
return self.actual
else:
raise StopIteration
for n in Contador(5):
print(n)
5. StopIteration
Cuando un iterador no tiene más elementos, debe lanzar StopIteration.
it = iter([1, 2])
print(next(it))
print(next(it))
print(next(it)) # StopIteration
6. Ejercicios
- Convertir una lista en iterador.
- Usar next() tres veces.
- Crear un iterador que devuelva letras.
- Crear un iterador que cuente hasta 10.
- Crear un iterador que devuelva números pares.
it = iter([1,2,3])
it = iter([10,20,30])
print(next(it))
print(next(it))
print(next(it))
class Letras:
def __init__(self, palabra):
self.palabra = palabra
self.i = 0
def __iter__(self):
return self
def __next__(self):
if self.i < len(self.palabra):
letra = self.palabra[self.i]
self.i += 1
return letra
raise StopIteration
class Contador:
def __init__(self):
self.n = 0
def __iter__(self):
return self
def __next__(self):
if self.n < 10:
self.n += 1
return self.n
raise StopIteration
class Pares:
def __init__(self, limite):
self.limite = limite
self.n = 0
def __iter__(self):
return self
def __next__(self):
if self.n <= self.limite:
val = self.n
self.n += 2
return val
raise StopIteration
7. Mini‑proyecto: Iterador de líneas numeradas
class Lineas:
def __init__(self, ruta):
self.ruta = ruta
self.lineas = open(ruta).read().splitlines()
self.i = 0
def __iter__(self):
return self
def __next__(self):
if self.i < len(self.lineas):
texto = f"{self.i+1}: {self.lineas[self.i]}"
self.i += 1
return texto
raise StopIteration
for linea in Lineas("datos.txt"):
print(linea)
8. Preguntas frecuentes
¿Todos los generadores son iteradores?
Sí, los generadores implementan __iter__ y __next__.
¿Todos los iteradores son generadores?
No, puedes crear iteradores manualmente.