Pitón

Iteradores en Python

Iteradores en Python
Un iterador es una herramienta valiosa para Python. Es un objeto utilizado para iterar todos los elementos de una colección. El iterador da acceso a los elementos de un contenedor, pero no realiza la iteración por sí solo. Funciona como un cursor de base de datos y se utiliza para leer la lista de registros uno por uno. Por ejemplo, un 'por'bucle que itera los valores de un contenedor funciona como un iterador. Python tiene muchos iteradores integrados para objetos iterables, como listas, tuplas, diccionarios, etc. Sin estos iteradores, 'itertoolsLas funciones se pueden usar para devolver otros iteradores en Python. Este artículo muestra cómo usar el bucle como iterador, iterador personalizado, iterador infinito y control de iterador infinito en Python 3. Algunos usos del 'itertoolsLas funciones también se explican en la última parte de este tutorial.

Métodos de iterador

Cada objeto iterador contiene los siguientes dos métodos.

Este método se utiliza para inicializar el objeto iterable. El objeto devuelto tiene el método '_ _Siguiente_ _()'en Python 3.

Este método devuelve el siguiente valor del objeto iterable. La relación entre el iterador y el objeto iterable se muestra en el siguiente diagrama.

Iterando con bucles

Se mencionó anteriormente que el 'por'loop llama al'Siguiente()'método implícitamente al iterar cualquier objeto iterable. Cuando se usa un bucle para iterar un objeto iterable, el 'por'loop llama al'Siguiente()'método implícitamente y el'tiempo'loop llama al'Siguiente()' o '__Siguiente__()'método explícitamente para leer el siguiente valor del objeto iterable. Ambos tipos de bucle continúan llamando a este método hasta que 'StopIteration'se genera la señal.

Ejemplo 1: iteración de objetos iterables con bucle 'for'

La siguiente secuencia de comandos muestra el uso de 'por'bucles para iterar cinco objetos iterables diferentes. El primero 'por'bucle se utiliza para iterar el valor de la cadena e imprimir cada carácter de la cadena en cada iteración. El segundo 'por'bucle se utiliza para iterar el contenido de un archivo de texto existente e imprimir cada línea del archivo en cada iteración. El tercero 'por'bucle se utiliza para iterar los valores de una tupla. El cuarto 'por'bucle se utiliza para iterar los valores contenidos en una lista. El quinto 'por'bucle se utiliza para iterar los valores contenidos en un diccionario.

# Iterando una cadena usando for loop
print ("Iteración de cadenas usando el bucle for")
str = "Python"
para val en str:
imprimir (val)
# Iterando un archivo existente usando for loop
print ("\ n \ nLeer un archivo línea por línea usando el bucle for")
para línea en abierto ("prueba.TXT"):
imprimir (línea, fin = "")
# # Iterando una tupla usando for loop
print ("\ n \ nIteración de tuplas usando el bucle for")
tup = ("Libro", "Papel", "Lápiz", "Bolígrafo")
para val en tup:
imprimir (val)
# Iterando una lista usando for loop
print ("\ n \ nList Iteration usando for loop")
listdata = ["Diseñador", "Analista", "Programador", "Administrador"]
para val en listdata:
imprimir (val)
# Iterando un diccionario usando for loop
print ("\ n \ nIteración de diccionario usando el bucle for")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
para índice en dictval:
print ("% s obtuvo% d puntos"% (index, dictval [index]))

Producción

La siguiente salida muestra que los caracteres del valor de la cadena; las lineas del prueba.TXT expediente; y los elementos de las tuplas, la lista y el diccionario se imprimen después de ejecutar el script.

Ejemplo 2: iterar listas con bucle 'while'

La siguiente secuencia de comandos muestra el uso de un 'tiempo'bucle para iterar una lista de datos. Aquí el 'iter ()'se utiliza para inicializar el objeto iterable, y el'Siguiente()'se utiliza para leer el siguiente valor del objeto iterable. StopIteration la señal se usa para terminar desde el infinito 'tiempo' bucle cuando no queda ningún elemento de la lista para leer.

# Definir una lista
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Inicializa el objeto iterable
init_iter_object = iter (lista de datos)
print ("Iterando datos de la lista usando while loop: \ n")
# Declarar y bucle while infinito
mientras que es verdadero:
intentar:
# El método next () se usa para iterar el siguiente valor
valor = siguiente (init_iter_object)
imprimir (valor)
excepto StopIteration:
# Terminar del ciclo después de iterar todos los valores
rotura

Producción

El siguiente resultado muestra que cada valor de la lista se ha impreso en cada línea utilizando el 'Siguiente()'método después de ejecutar el script.

Ejemplo 3: iterar una tupla con el método '__next __ ()' y el bucle 'while'

En el siguiente guión, ambos 'Siguiente()' y '__Siguiente__()Los métodos se utilizan para iterar los valores de una tupla. La 'iter ()'método se utiliza para crear el objeto iterable, llamado'init_iter.' Aquí el 'Siguiente()'se llama dos veces al método para imprimir los dos primeros valores de la tupla. A continuación, un infinito 'tiempo'bucle se utiliza para iterar los valores restantes de la tupla y el'StopIteration'la señal se usa para terminar del bucle, como en el ejemplo anterior.

# definir una tupla
animal_tuple = ('Pájaro', 'León', 'Mono', 'Serpiente', 'Elefante')
print ("Los valores de la tupla son: \ n")
# Inicializar un objeto iterador usando iter ()
init_iter = iter (animal_tuple)
# iterar e imprimir valor usando el método next ()
imprimir (siguiente (init_iter))
imprimir (siguiente (init_iter))
# Definir un bucle while infinito
mientras que es verdadero:
intentar:
# iterar e imprimir valor usando el método __next __ ()
imprimir (init_iter.__Siguiente__())
excepto StopIteration:
# Terminar del ciclo después de iterar todos los valores
rotura

Producción

El siguiente resultado muestra que después de ejecutar el script, los dos primeros valores, 'Pájaro' y 'León,'están impresos con el'Siguiente()'método, mientras que los otros tres valores,'Mono,"Serpiente,' y 'Elefante,'están impresos con el'__Siguiente__()'método.

Iterando con un iterador personalizado

Esta sección muestra cómo se pueden implementar diferentes tipos de iteradores personalizados mediante la creación de clases. Ambos '__iter __ ()' y el '__Siguiente__()'se implementarán en una clase, y el'tiempo'bucle se utilizará para iterar los valores del objeto iterable.  La siguiente parte de este artículo también mostrará cómo crear un iterador personalizado infinito y controlar la iteración.

Ejemplo 4: uso de un iterador personalizado simple

El siguiente script le permite calcular el valor de Xnorte mediante el uso de un iterador personalizado sin usar ninguna función incorporada de Python. La clase llamada 'x_a_la_potencia_n'se declara en el script. La '__en eso__()'método de la clase inicializará los valores de X y norte que se utilizará en el momento de la creación del objeto. La '__iter __ ()El método 'inicializará la variable de clase, que almacenará el'resultado'variable del cálculo en cada iteración. Los valores de X y norte se tomará como entrada del usuario. Un objeto de la clase 'números'se crea con X y norte. A continuación, un objeto iterable llamado 'iter_obj'se crea para llamar al'__Siguiente__()' método para n-1 veces usando el 'tiempo'bucle para calcular el valor de Xnorte. En cada iteración, el valor de X se multiplicará por el valor anterior de la 'resultado' variable. Después de terminar el 'tiempo'bucle, el'__Siguiente__()'se llamará nuevamente al método para imprimir el valor de Xnorte.

"Crea una clase para calcular el
x elevado a n usando iterador
"
clase x_a_la_potencia_n:
# Inicializar el valor de x y n
def __init __ (self, x = 0, n = 0):
uno mismo.x = x
uno mismo.n = n
# Inicializar el iterable
def __iter __ (self):
uno mismo.resultado = 1
Regresar
# Calcula el valor en cada iteración
def __next __ (self):
si yo mismo.n> = 0:
uno mismo.resultado * = self.X
uno mismo.n - = 1
Regresar.resultado
# Toma los valores de x y n
x = int (input ("Ingrese el valor de x:"))
n = int (input ("Ingrese el valor de n:"))
# Crea un objeto de la clase
números = x_a_la_potencia_n (x, n)
# Crea un iterable
iter_obj = iter (números)
intentar:
i = 0
mientras yo < n-1):
# Recuperar el siguiente valor usando el método next ()
siguiente (iter_obj)
i + = 1
print ("\ n% d a la potencia% d es% d"% (x, n, iter_obj.__Siguiente__()))
excepto StopIteration:
# Terminar del script si no existe ningún valor
imprimir (siguiente (iter_obj))

Producción

El siguiente resultado muestra que 2 se toma como el valor de X y 4 se toma como el valor de norte. Entonces, el script calculó el valor de 2ser - estar dieciséis.

Ejemplo 5: uso de un iterador personalizado infinito

El siguiente script imprimirá continuamente los números que son divisibles por 5 con un retraso de un segundo hasta que el usuario presione Ctrl + c para generar el 'Teclado Interrumpido'señal. El infinito 'tiempo'loop se usa aquí para crear un iterador personalizado infinito. La 'horaEl módulo 'se importa al comienzo del script para usar el módulo'dormir()'método para retrasar cada salida por un segundo. El número 5 se inicializa en el 'num'variable como el primer número divisible en el script, y el siguiente número se genera sumando 5 con el valor anterior de'num' variable.

# Módulo de tiempo de importación
tiempo de importación
"
Crea una clase para generar los números
que son divisibles por 5 continuamente
"
clase Number_Divisible_by_five:
# Inicializar el valor de num
def __iter __ (self):
uno mismo.num = 5
Regresar
# Calcula el siguiente número que es divisible por 5
def __next __ (self):
next_num = self.num
hora.dormir (1)
uno mismo.num + = 5
return next_num
# Crea un objeto de la clase
Objeto = Number_Divisible_by_five ()
# Crear objeto iterable
iterObject = iter (Objeto)
# Definir bucle infinito
mientras que es verdadero:
intentar:
# Ir a la siguiente iteración
imprimir (iterObject.__Siguiente__())
excepto KeyboardInterrupt:
imprimir ("Ctrl + C está presionado.")
# Terminar del bucle cuando se presiona Ctrl + C
rotura

Producción

El siguiente resultado muestra que el número comenzó a imprimirse desde 5 e imprimió continuamente los siguientes números uno tras otro con una duración de un segundo. Cuando el usuario presionó Ctrl + c después de imprimir el número 60, el mensaje 'Ctrl + C está presionado.'fue impreso, antes de terminar el guión.

Ejemplo 6: control de un iterador infinito personalizado

El siguiente script muestra cómo detener el iterador infinito personalizado después de completar un número específico de iteraciones. La '__iter __ ()'método de la clase inicializará los valores de la'norte' y 'resultado'variables de clase. El script calculará los cuadrados de los números, comenzando por 1, que se almacenan en la variable norte, e imprime el valor cuadrado de norte hasta el valor de norte es mayor que 5. Aquí se declara un bucle while infinito para llamar al '__Siguiente__()'método para imprimir el valor cuadrado de norte. Cuando el valor de norte alcanza 6, la 'StopIteration'se generará la señal para terminar el bucle.

# Módulo de tiempo de importación
tiempo de importación
"
Crea una clase para calcular
el cuadrado del número comienza desde 1 hasta
el valor del número es menor que 6
"
clase calcular_potencia:
# Inicializar el valor de num
def __iter __ (self):
uno mismo.n = 1
uno mismo.resultado = 0
Regresar
# Calcula el siguiente número que es divisible por 5
def __next __ (self):
# Compruebe que el valor de n sea menor o igual a 5 o no
si yo mismo.norte <= 5:
uno mismo.resultado = self.n ** 2
hora.dormir (0.5)
uno mismo.n + = 1
Regresar.resultado
demás:
subir StopIteration
# Crea un objeto de la clase
Objeto = calcular_potencia ()
# Crear objeto iterable
iterObject = iter (Objeto)
# Definir bucle infinito
mientras que es verdadero:
intentar:
# Vaya a la siguiente iteración e imprima el valor cuadrado
print ("El cuadrado de% d es% d"% (iterObject.n, iterObject.__Siguiente__()))
excepto StopIteration:
print ("\ nTerminado del bucle.")
# Terminar del bucle
rotura

Producción

El siguiente resultado muestra que el iterador personalizado infinito finalizó cuando el valor de n se volvió mayor que 5. El script calculó e imprimió los valores cuadrados de los valores numéricos del 1 al 5.

Iterando con itertools

Python tiene un módulo incorporado llamado 'itertools'que se puede usar para crear un iterador para iterar datos usando un bucle. La siguiente sección de este artículo muestra cómo usar tres funciones en este módulo.

itertools.contar()

La 'itertools.cont'función se puede utilizar con la'mapa()'método para generar datos secuenciales y con el'Código Postal()'método para agregar secuencias utilizando el parámetro de recuento de este método. La sintaxis de esta función se da a continuación.

Sintaxis

itertools.contar (inicio = 0, paso = 1)

Aquí, el primer parámetro, 'comienzo,'se utiliza para definir el valor inicial de la secuencia, y 0 es el valor predeterminado de este parámetro. El segundo parámetro, 'paso,'se utiliza para establecer la diferencia entre los números consecutivos, y 1 es el valor predeterminado de este parámetro.

Ejemplo 7: Uso de la función count () de itertools

El siguiente script calculará la suma de 0 a norte números, donde el valor de norte será tomado del usuario. La 'contar()'la función es importada de'itertools'al comienzo del guión. La 'my_iterator'objeto se inicializa con el'contar()'función, con un'comienzo'valor de 0 y a'paso'valor de 1. A continuación, el 'suma_resultado'la variable se inicializa con el primer valor del objeto iterable. El valor inicial se inicializa a la variable I y el número inicial se almacena como el carácter de la variable, números que se utilizarán para combinar otros números en cada iteración. Los valores de los números secuenciales se sumarán en cada iteración cuando el 'Siguiente()'método se llama. Cuando el valor de I se vuelve mayor que norte, el script terminará mostrando el resultado de la suma.

"La siguiente secuencia de comandos calculará
la suma de 0 al número que se tomará como entrada.
"
# Importar recuento
desde itertools import count
# Crea un objeto iterable de count ()
my_iterator = count (inicio = 0, paso = 1)
# Leer el primer valor del iterador
suma_resultado = siguiente (mi_iterador)
# Toma una entrada numérica para terminar el ciclo while infinito
n = int (input ("Ingrese el valor límite:"))
# Inicializar el valor de i y números
i = suma_resultado
números = f 'i'
# Declarar bucle infinito
mientras que es verdadero:
# Suma el número en cada iteración
suma_resultado + = i
i = siguiente (mi_iterador)
# Termina el ciclo si el valor de i es mayor que n
si (i> n):
rotura
# Agregue el valor numérico como una cadena con el símbolo '+'
números + = "+" + f 'i'
# Imprime el valor final
print ("% s =% d"% (números, suma_resultado))

Producción

El siguiente resultado muestra que el número 10 se toma como la entrada utilizada para terminar el bucle después de ejecutar el script. En esta salida, el script ha calculado la suma de 0 a 10 e imprimió la salida, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.ciclo()

Esta función contiene solo un argumento, que puede ser cualquier objeto. El propósito de esta función es repetir los valores del objeto después de completar la iteración de todos los valores. Aquí, cadenas, tuplas, listas, etc. se puede utilizar como un objeto. Los retornos de objetos iterables de esta función se utilizan para iterar cada valor del objeto que se utilizará como argumento mediante el uso de 'Siguiente()'método. El número de veces que se repetirán los valores del objeto iterable se basará en el número de iteraciones del bucle. La sintaxis de esta función se da a continuación.

Sintaxis

itertools.ciclo (Objeto)

Ejemplo 8: Uso de la función cycle () de itertools

La 'aleatorio' y 'itertools'los módulos se importan al comienzo del script para generar un número aleatorio y usar el'ciclo()'función de la'itertools'módulo para repetir los datos. Se utiliza una lista de tres números aleatorios como argumento de la 'ciclo()'función. El objeto iterable llamado 'num_list'es inicializado por el valor de retorno de esta función. La 'contar'variable se inicializa a 0, y cuando el valor de esta variable se convierte en 6, la 'tiempo'bucle terminará. Entonces el 'tiempo'bucle iterará seis veces, y cada valor de la lista se repetirá solo una vez.

# Importar módulo aleatorio
importar al azar
# Importar módulo itertools
importar itertools
# Genere un objeto iterable basado en la lista de tres números aleatorios
num_list = itertools.ciclo ([aleatorio.randint (1,5), aleatorio.randint (10,50), aleatorio.randint
(100,500)])
# Inicializar el contador
cuenta = 0
# Itere el bucle 6 veces
mientras (cuenta != 6):
print ('El número aleatorio actual es:' + f 'siguiente (num_list)')
contar + = 1

Producción

El siguiente resultado muestra que tres números aleatorios, 3, 17, y 185, se han generado como elementos de lista. El ciclo se itera seis veces y estos tres valores se repiten para las siguientes iteraciones.

Itertools.repetir()

La función 'repeat ()' funciona como un iterador infinito y puede tomar dos argumentos. Cuando se omite el segundo argumento, la función 'repeat ()' funciona como un iterador infinito y repite el valor un número infinito de veces. Esta función no ocupa memoria para cada repetición. Simplemente crea la variable una vez en la memoria y repite la misma variable un número infinito de veces cuando solo se establece un argumento para esta función. La sintaxis de esta función se da a continuación.

Sintaxis

itertools.repetir (valor, límite)

El primer argumento se usa para tomar el valor que se repetirá. El segundo argumento es opcional y se utiliza para establecer el límite de repeticiones.

Ejemplo 9: Uso de la función repeat () del módulo itertools

La 'itertoolsEl módulo 'se importa al comienzo del script para usar el módulo'repetir()'función. Se tomará un valor de cadena del usuario para repetir, y se tomará un valor numérico del usuario para establecer el límite de repetición. El valor de retorno de la 'repetir()La función 'se convertirá en una lista con la'lista()'método y almacenado en el'listData' variable. Los valores de la 'listData'se imprimirá con el'por' círculo.

# Importar módulo itertools
importar itertools
# Tome el valor de entrada que se repetirá
string = input ("Ingrese una cadena:")
# Toma el valor numérico para repetir
repeat = int (input ("Ingresa el número para repetir:"))
# usando repeat () para agregar repetidamente la cadena a una lista
listData = lista (itertools.repetir (cuerda, repetir))
# Inicializar i
i = 1
print ("Los valores de la lista son: \ n")
# Itere la lista usando for loop
para val en listData:
print ("Elemento de lista% d =% s"% (i, val))
i + = 1

Producción

El siguiente resultado muestra que 'Pitón'se toma como el valor de la cadena, y 3 se toma como el número utilizado para repetir el valor de la cadena después de ejecutar el script. La salida muestra que la cadena 'Pitón'se repite tres veces.

Conclusión

El concepto de iterador y los usos de diferentes tipos de iteradores en Python se intenta explicar con ejemplos muy simples en este artículo. Los usuarios de Python pueden usar un iterador integrado o pueden crear su iterador personalizado según el requisito. Este artículo ayudará a los usuarios de Python a conocer los métodos utilizados en el iterador y cómo funcionan estos métodos con cualquier bucle para leer cualquier objeto iterable. Algunos usos de itertools El módulo de Python también se explica en este artículo para conocer más detalles del iterador en Python.

Cómo instalar League Of Legends en Ubuntu 14.04
Si eres fanático de League of Legends, esta es una oportunidad para que pruebes League of Legends. Tenga en cuenta que LOL es compatible con PlayOnLin...
Instale el último juego de estrategia de OpenRA en Ubuntu Linux
OpenRA es un motor de juego de estrategia en tiempo real libre / gratuito que recrea los primeros juegos de Westwood como el clásico Command & Conquer...
Instale el último emulador de Dolphin para Gamecube y Wii en Linux
Dolphin Emulator te permite jugar los juegos de Gamecube y Wii que elijas en computadoras personales con Linux (PC). Al ser un emulador de juegos de ...