Iterar con For

El bucle for en Python es una estructura de control que se utiliza para repetir un bloque de cรณdigo varias veces. Se utiliza para iterar sobre un objeto iterable, como una lista, una tupla, un diccionario, un conjunto, etc.

La sintaxis del bucle for en Python es la siguiente:

variable in objeto_iterable:
    # bloque de cรณdigo a repetir

Donde variable es una variable que se asigna a cada elemento del objeto iterable en cada iteraciรณn del bucle, y objeto_iterable es un objeto que contiene elementos que se deben iterar.

Aquรญ hay un ejemplo de cรณdigo que muestra cรณmo usar un bucle for para imprimir los nรบmeros en una lista:

numbers = [1, 2, 3, 4, 5]
for num in numbers:
    print(num)

Iterando cadena al revรฉs. Haciendo uso de [::-1] se puede iterar la lista desde el รบltimo al primer elemento.

texto = "Python"
for i in texto[::-1]:
    print(i) #n,o,h,t,y,P

Itera la cadena saltรกndose elementos. Con [::2] vamos tomando un elemento si y otro no.

texto = "Python"
for i in texto[::2]:
    print(i) #P,t,o

range

range es una funciรณn en Python que se utiliza para generar una secuencia de nรบmeros, por lo general con fines de iteraciรณn. La cabecera de la funciรณn range es la siguiente:

range(start, stop, step)

Ejempo:

# Genera una secuencia de nรบmeros del 0 al 9 (10 nรบmeros)
for i in range(10):
    print(i)

# Genera una secuencia de nรบmeros del 2 al 9 (7 nรบmeros)
for i in range(2, 10):
    print(i)

# Genera una secuencia de nรบmeros del 2 al 12, saltando de 2 en 2 (5 nรบmeros)
for i in range(2, 13, 2):
    print(i)

Es importante destacar que range genera un objeto de tipo range, no una lista. Para convertirlo en una lista, se puede utilizar la funciรณn list.

iterables

Un iterable en Python es un objeto que contiene una secuencia de elementos y se puede recorrer en un bucle. Los iterables son una parte fundamental de la programaciรณn en Python y se usan ampliamente en muchas tareas.

Algunos ejemplos de iterables en Python incluyen listas, tuplas, diccionarios, conjuntos, cadenas de texto, archivos y objetos personalizados que implementan el mรฉtodo __iter__ o el protocolo de iteraciรณn.

Para recorrer un iterable, se puede usar el bucle for. La sintaxis para hacer una iteraciรณn sobre un iterable es la siguiente:

for elemento in iterable:
    # hacer algo con el elemento

Donde iterable es el objeto iterable que se va a recorrer y elemento es una variable que se asigna a cada elemento del iterable en cada iteraciรณn.

Tiene bastante sentido, porque si queremos iterar una variable, esta variable debe ser iterable, todo muy lรณgico. Pero llegados a este punto, tal vez de preguntes ยฟpero cรณmo se yo si algo es iterable o no?. Bien fรกcil, con la siguiente funciรณn isinstance() podemos saberlo. No te preocupes si no entiendes muy bien lo que estamos haciendo, fรญjate solo en el resultado, True significa que es iterable y False que no lo es.

from collections import Iterable
lista = [1, 2, 3, 4]
cadena = "Python"
numero = 10
print(isinstance(lista, Iterable))  #True
print(isinstance(cadena, Iterable)) #True
print(isinstance(numero, Iterable)) #False

Por lo tanto las listas y las cadenas son iterables, pero numero, que es un entero no lo es. Es por eso por lo que no podemos hacer lo siguiente, ya que darรญa un error. De hecho el error serรญa TypeError: int' object is not iterable.

iteradores

Un iterador en Python es un objeto que permite recorrer y acceder secuencialmente a los elementos de una colecciรณn, como una lista o una tupla. Un iterador es similar a un iterable, pero tiene algunas diferencias clave.

Una de las principales diferencias es que un iterador solo permite acceder a sus elementos una vez, y no se puede volver a utilizar despuรฉs de haber recorrido la colecciรณn completa. Esto se conoce como iteraciรณn รบnica.

Otra diferencia es que los iteradores se pueden crear a partir de un iterable usando la funciรณn iter:

snumbers = [1, 2, 3, 4, 5]
numbers_iterator = iter(numbers)
print(it)       #<list_iterator object at 0x106243828>
print(type(it)) #<class 'list_iterator'>

Una vez que se tiene un iterador, se puede acceder a sus elementos usando la funciรณn next:

print(next(numbers_iterator))  # imprime 1
print(next(numbers_iterator))  # imprime 2

Dado que el iterador hace referencia a nuestra lista, si llamamos mรกs veces a next() que la longitud de la lista, se nos devolverรก un error StopIteration. Lamentablemente no existe ninguna opciรณn de volver al elemento anterior.

Los iteradores son รบtiles porque permiten recorrer y acceder a los elementos de una colecciรณn de manera eficiente y controlada. Algunas de las utilidades principales de los iteradores incluyen:

  1. Ahorro de memoria: Los iteradores permiten recorrer una colecciรณn un elemento a la vez, en lugar de almacenar todos los elementos en la memoria a la vez. Esto es especialmente รบtil cuando se trabaja con colecciones muy grandes.

  2. Control de la iteraciรณn: Los iteradores permiten controlar la iteraciรณn sobre una colecciรณn, ya sea recorriendo la colecciรณn de manera secuencial o saltรกndose elementos especรญficos.

  3. Mejor rendimiento: Al trabajar con colecciones muy grandes, los iteradores pueden mejorar el rendimiento de su cรณdigo, ya que permiten recorrer la colecciรณn de manera eficiente.

  4. Reutilizabilidad: Los iteradores pueden ser reutilizados en diferentes partes de su cรณdigo, lo que puede ayudar a mantener su cรณdigo limpio y organizado.

Es perfectamente posible tener diferentes iteradores para la misma lista, y serรกn totalmente independientes. Tan solo dependerรกn de la lista, como es evidente, pero no entre ellos.

lista = [5, 6, 7]
it1 = iter(lista)
it2 = iter(lista)
print(next(it1)) #5
print(next(it1)) #6
print(next(it1)) #7
print(next(it2)) #5

enumerate

enumerate es una funciรณn en Python que se utiliza para iterar sobre una secuencia (como una lista, una cadena, etc.) y ademรกs mantener un registro del รญndice del elemento actual. La cabecera de la funciรณn enumerate es la siguiente:

enumerate(iterable, start=0)
  • iterable: La secuencia que se quiere iterar.

  • start (opcional): El รญndice inicial. Por defecto es 0.

Ejemplo:

# Enumerar los elementos de una lista
colors = ['red', 'green', 'blue']
for i, color in enumerate(colors):
    print(i, color)

# Salida:
# 0 red
# 1 green
# 2 blue

En un bucle for, enumerate permite iterar sobre los elementos de una secuencia mientras se mantiene un registro del รญndice de cada elemento. Esto es รบtil en muchos casos, por ejemplo, para imprimir tanto el elemento como su รญndice o para acceder a elementos especรญficos de una secuencia basados en su รญndice.

Por รบltimo, es importante notar que su uso no se limita รบnicamente a bucles for. Podemos convertir el tipo enumerate en una lista de tuplas, donde cada una contiene un elemento de la colecciรณn inicial y el รญndice asociado.

lista = ["A", "B", "C"]

en = list(enumerate(lista))
print(en)

# Salida;
# [(0, 'A'), (1, 'B'), (2, 'C')]

Last updated