#11 Iteradores en Python
hace 3 años · Actualizado hace 2 años
Los iteradores son una herramienta que pone Python a nuestra disposición para poder acceder de una manera más cómoda a los datos que tenemos almacenados en diferentes estructuras de datos iterables.
Para que te quede más claro, vamos a ir viendo parte por parte como funcionan y casos de uso para los diferentes tipos de datos que hay.
Entrar al curso completo de Python desde cero a experto
¿Qué es un iterador en Python?
Un iterador en Python es un objeto que almacena una estructura de datos. Diferentes llamadas a la función next() con el elemento iterable como parámetro, nos devuelve el siguiente elemento por leer, empezando en la posición 0 y devolviendo el error StopIteration cuando llega al final.
El objetivo de utilizar iteradores en Python en lugar de las operaciones necesarias para interactuar con los diferentes elementos que hay dentro de las estructuras es principalmente para favorecer la lectura y escritura de código. De esta forma, tendremos un código o programa mucho más legible.
Elementos iterables en Python
Ahora bien, hay diferentes elementos que son iterables en Python, y aunque suelen iterarse de la misma manera, voy a hablarte de todos ellos con ejemplos para que comprendas mejor como funcionan.
Como iterar listas en Python
Como ya sabrás, las listas son un tipo de dato en python muy utilizado y aunque puede iterarse de otras maneras, como podría ser usando un bucle for, para algunos casos será totalmente necesario hacer uso de los iteradores. Para ello, primero debemos convertir la lista a un elemento iterable, usando la función iter().
>>> lista = iter([1,2,3,4,5]) >>> next(lista) 1 >>> next(lista) 2 >>> next(lista) 3 >>> next(lista) 4 >>> next(lista) 5 >>> next(lista) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> lista = iter([1,2,3,4,5]) >>> lista.__next__() 1 >>> lista.__next__() 2 >>> lista.__next__() 3 >>> lista.__next__() 4 >>> lista.__next__() 5 >>> lista.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
Si lo que quieres es recorrer el conjunto de datos de forma inversa, debes hacer lo mismo que en el ejemplo anterior pero sustituyendo la sentencia iter([1,2,3,4,5]) por reversed([1,2,3,4,5]), de forma que genera el elemento iterable inverso.
Como iterar cadenas en Python
Las cadenas o String hacen referencia al texto escrito y en Python se suelen manejar de forma similar a las listas. Por eso, al iterar una cadena tendremos unos resultados similares a los de iterar una lista, siendo cada elemento un caracter de la cadena.
>>> cadena = iter("Hola Mundo") >>> next(cadena) 'H' >>> next(cadena) 'o' >>> next(cadena) 'l' >>> next(cadena) 'a' >>> next(cadena) ' ' >>> next(cadena) 'M' >>> next(cadena) 'u' >>> next(cadena) 'n' >>> next(cadena) 'd' >>> next(cadena) 'o' >>> next(cadena) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
Como iterar conjuntos en Python
Un conjunto es un tipo de dato similar a las listas pero con la particularidad de que no puede haber elementos repetidos. Dicho eso, los iteradores en los conjuntos funcionan exactamente igual que en las listas:
>>> conjunto = iter(set([1,2,3,4,5])) >>> next(conjunto) 1 >>> next(conjunto) 2 >>> next(conjunto) 3 >>> next(conjunto) 4 >>> next(conjunto) 5 >>> next(conjunto) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
Como iterar diccionarios en Python
Los diccionarios son un tipo de dato estructurado, es decir, más complejo. Por eso, tenemos varias maneras de acceder a los datos de un diccionario en Python. Primero, debes saber que los diccionarios están compuestos por pares de clave y valor y por defecto accederemos a las claves del diccionario, aunque podemos especificar si queremos explícitamente acceder a las claves o a los valores de forma separada:
>>> diccionario = dict(uno=1, dos=2, tres=3) >>> clave_default = iter(diccionario) >>> next(clave_default) 'uno' >>> next(clave_default) 'dos' >>> next(clave_default) 'tres' >>> next(clave_default) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> diccionario = dict(uno=1, dos=2, tres=3) >>> valor = iter(diccionario.items()) >>> next(valor) ('uno', 1) >>> next(valor) ('dos', 2) >>> next(valor) ('tres', 3) >>> next(valor) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> diccionario = dict(uno=1, dos=2, tres=3) >>> valor = iter(diccionario.values()) >>> next(valor) 1 >>> next(valor) 2 >>> next(valor) 3 >>> next(valor) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
Deja una respuesta
Otras Entradas Relacionadas