Un Iterable en Python es cualquier objeto que dispone de un Iterador, y por tanto puede ser recorrido secuencialmente.
Entre los iterables predefinidos se incluyen listas, tuplas, cadenas de texto, conjuntos.
# Ejemplos de iterables
lista = [1, 2, 3, 4, 5]
cadena = "Python"
tupla = (1, 2, 3)
conjunto = {1, 2, 3}
Aunque nosotros podemos crear nuestros propios iterables (como veremos más abajo).
Uso de iterables
Un iterable es cualquier objeto que puede ser recorrido en un bucle for
. Por ejemplo, se muestra cómo utilizar un iterable directamente en un bucle for.
# Ejemplo de uso de un iterable en un bucle for
lista = [1, 2, 3, 4, 5]
for elemento in lista:
print(elemento)
# Salida: 1, 2, 3, 4, 5
Internamente, cuando usamos for
para recorrer un objeto Iterable, estamos usando su iterador para obtener los distintos elementos.
¿Qué es un Iterador?
Un Iterador es un elemento que apunta a un elemento, generalmente perteneciente a una colección
Técnicamente un iterador es simplemente un objeto que implementa los métodos __iter__()
y __next__()
.
- El método
__iter__()
devuelve el propio objeto iterador - El método
__next__()
devuelve el siguiente elemento en la secuencia
Cuando no hay más elementos que devolver, __next__()
lanza una excepción StopIteration
.
Creación de un iterador
Vamos a ver cómo podemos crear un iterador personalizado en Python.
# Ejemplo de creación de un iterador personalizado
class Contador:
def __init__(self, inicio, fin):
self.inicio = inicio
self.fin = fin
def __iter__(self):
self.numero = self.inicio
return self
def __next__(self):
if self.numero <= self.fin:
resultado = self.numero
self.numero += 1
return resultado
else:
raise StopIteration
# Uso del iterador personalizado
contador = Contador(1, 5)
iterador = iter(contador)
for numero in iterador:
print(numero)
# Salida: 1, 2, 3, 4, 5
Ejemplos prácticos
Creando un iterador desde un iterable
Aquí se muestra cómo crear un iterador a partir de un iterable utilizando la función iter(). Luego, se utilizan llamadas a next() para obtener los elementos del iterador uno a uno.
lista = [1, 2, 3, 4, 5]
# Crear un iterador a partir de un iterable
iterador = iter(lista)
print(next(iterador)) # Salida: 1
print(next(iterador)) # Salida: 2
print(next(iterador)) # Salida: 3
print(next(iterador)) # Salida: 4
print(next(iterador)) # Salida: 5
print(next(iterador)) # Stop iteration
En forma simplificada, esto es lo que hace internamente el un bucle for
.
Usando iteradores en funciones y métodos
Este ejemplo muestra cómo utilizar iteradores dentro de una función. En este caso, imprime cada elemento de un iterable.
# Usar iteradores en funciones y métodos
def recorrer(iterable):
iterator = iter(iterable)
while True:
try:
elemento = next(iterator)
print(elemento)
except StopIteration:
break
# Ejemplo de uso
cadena = "Python"
recorrer(cadena)
# Salida: p, y, t, h, o, n
- La función
recorrer
toma un iterable - Usa un bucle
while
junto connext()
para imprimir cada elemento - Para cuando encuentre una excepción
StopIteration