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