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
recorrertoma un iterable - Usa un bucle
whilejunto connext()para imprimir cada elemento - Para cuando encuentre una excepción
StopIteration