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. Iterator da acceso a los elementos de un contenedor, pero no hace la iteración por sí solo. Funciona como un cursor de la base de datos y se usa para leer la lista de registros uno por uno. Por ejemplo, A 'para'El bucle que itera los valores de un contenedor funciona como iterador. Python tiene muchos iteradores incorporados para objetos iterables, como listas, tuplas, diccionarios, etc. Sin estos iteradores ','Itertools'Las funciones se pueden usar para devolver a otros iteradores en Python. Este artículo muestra cómo usar el bucle como iterador, iterador personalizado, iterador infinito y iterador infinito de control en Python 3. Algunos usos del 'Itertools'Las funciones también se explican en la última parte de este tutorial.

Métodos iteradores

Cada objeto iterador contiene los siguientes dos métodos.

  • _ _iter_ _ ()

Este método se utiliza para inicializar el objeto Iterable. El objeto devuelto tiene el método '_ _próximo_ _()'En Python 3.

  • _ _próximo_ _()

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 'para'Loop llama al'próximo()'Método implícitamente al iterar cualquier objeto iterable. Cuando se usa un bucle para iterar un objeto iterable, el 'para'Loop llama al'próximo()'Método implícitamente y el'mientras'Loop llama al'próximo()' o '__próximo__()'Método explícitamente para leer el siguiente valor del objeto Iterable. Ambos tipos de bucle continúan llamando a este método hasta el 'Stopiteración'Se genera la señal.

Ejemplo 1: iterando iterable objetos con el bucle 'para'

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

# Iterando una cadena usando para bucle
imprimir ("iteración de cadena usando para bucle")
str = "Python"
para val en str:
Imprimir (Val)
# Iterando un archivo existente usando para bucle
imprimir ("\ n \ nreading un archivo línea por línea usando para bucle")
para línea en abierta ("Prueba.TXT"):
imprimir (línea, end = "")
# # Iterando una tupla usando para bucle
imprimir ("\ n \ ntuple iteration usando para bucle")
tup = ("libro", "papel", "lápiz", "bolígrafo")
Para Val en TUP:
Imprimir (Val)
# Iterando una lista usando para bucle
imprimir ("\ n \ nlist iteration usando para bucle")
listData = ["Designer", "Analista", "Programador", "Administrador"]
para val en listData:
Imprimir (Val)
# Iterando un diccionario usando para bucle
imprimir ("\ n \ ndiccionario iteration usando para bucle")
dictval = 'meher': 95, 'sakib': 97, 'akhi': 70, 'fiaz': 78
Para el índice en dictval:
Imprimir (" %S logrado %d marcas" %(índice, dictval [índice]))

Producción

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

Ejemplo 2: iterando listas con el bucle 'While'

El siguiente script muestra el uso de A 'mientras'bucle para iterar una lista de datos. Aquí el 'iter ()'El método se usa para inicializar el objeto Iterable y el' 'próximo()'El método se usa para leer el siguiente valor del objeto Itererable. Stopiteración la señal se usa para terminar desde el infinito 'mientras' bucle cuando no queda ningún elemento de la lista para leer.

# Defina una lista
listData = ['Google.com ',' bing.com ',' Yahoo.com ',' Baidu.com ',' Duckduckgo.com ']
# Inicializar el objeto Iterable
init_iter_object = iter (listData)
Imprimir ("Datos de la lista de iteraciones usando While Loop: \ n")
# Declarar e infinito mientras bucle
Mientras que es cierto:
intentar:
El método # next () se utiliza para iterar el siguiente valor
valor = next (init_iter_object)
Imprimir (valor)
Excepto la paro:
# Terminar desde el bucle después de iterando todos los valores
romper

Producción

La siguiente salida muestra que cada valor de la lista se ha imprimido en cada línea utilizando el 'próximo()'Método después de ejecutar el script.

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

En el siguiente script, ambos 'próximo()' y '__próximo__()'Los métodos se utilizan para iterar los valores de una tupla. El 'iter ()'El método se usa para crear el objeto Iterable, llamado'init_iter.' Aquí el 'próximo()'El método se llama dos veces para imprimir los dos primeros valores de la tupla. A continuación, un infinito 'mientras'Loop se usa para iterar los valores restantes de la tupla y el'Stopiteración'La señal se usa para terminar desde el bucle, como en el ejemplo anterior.

# Defina una tupla
animal_tuple = ('pájaro', 'león', 'mono', 'serpiente', 'elefante')
imprimir ("Los valores de la tupla son: \ n")
# Inicializar un objeto Iterator usando iter ()
init_iter = iter (animal_tuple)
# iterar e imprimir el valor usando el método Next ()
Imprimir (Next (init_iter))
Imprimir (Next (init_iter))
# Defina un infinito mientras el bucle
Mientras que es cierto:
intentar:
# iterador e imprimir valor usando __next __ () método
imprimir (init_iter.__próximo__())
Excepto la paro:
# Terminar desde el bucle después de iterando todos los valores
romper

Producción

La siguiente salida muestra que después de ejecutar el script, los dos primeros valores ','Pájaro' y 'León,'se imprimen con el'próximo()'Método, mientras que los otros tres valores', 'Mono,"Serpiente,' y 'Elefante,'se imprimen con el'__próximo__()' 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 '__próximo__()'Los métodos se implementarán en una clase y el'mientras'El bucle se usará 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_to_the_power_n'se declara en el guión. El '__en eso__()'El método de la clase inicializará los valores de X y norte que se utilizará en el momento de la creación de objetos. El '__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'__próximo__()' método para N-1 veces usando el 'mientras'bucle para calcular el valor de Xnorte. En cada iteración, el valor de X se multiplicará por el valor anterior del 'resultado' variable. Después de terminar el 'mientras'Loop, el'__próximo__()'Se llamará a los métodos nuevamente para imprimir el valor de Xnorte.

"Cree una clase para calcular el
x a la potencia n usando iterator
"
Clase X_TO_The_Power_N:
# Inicializar el valor de x y n
def __init __ (self, x = 0, n = 0):
ser.x = x
ser.n = n
# Inicializar el iterable
def __iter __ (self):
ser.resultado = 1
volver a ser
# Calcule el valor en cada iteración
def __next __ (self):
Si uno mismo.n> = 0:
ser.resultado *= self.X
ser.n -= 1
volver a ser.resultado
# Tomar los valores de x y n
x = int (entrada ("Ingrese el valor de x:"))
n = int (entrada ("Ingrese el valor de n:"))
# Crear un objeto de la clase
números = x_to_the_power_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
imprimir ("\ n %d to la potencia %d es %d" %(x, n, iter_obj.__próximo__()))
Excepto la paro:
# Terminar desde el script si no existe ningún valor
Imprimir (Next (iter_obj))

Producción

La siguiente salida 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 24 ser 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 'Keyboardinterrum'señal. El infinito 'mientras'Loop se usa aquí para crear un iterador personalizado infinito. El 'tiempo'El módulo se importa al comienzo del script para usar el'dormir()'Método para retrasar cada salida por un segundo. El número 5 se inicializa al 'numer'Variable como el primer número divisible en el script, y el siguiente número se genera agregando 5 con el valor anterior del'numer' variable.

# Módulo de tiempo de importación
tiempo de importación
"
Crear 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):
ser.num = 5
volver a ser
# Calcule el siguiente número que es divisible por 5
def __next __ (self):
next_num = self.numer
tiempo.dormir (1)
ser.num += 5
Regresar Next_num
# Crear un objeto de la clase
Objeto = número_divisible_by_five ()
# Crear objeto Itererable
iterObject = iter (objeto)
# Definir bucle infinito
Mientras que es cierto:
intentar:
# Ve para la próxima iteración
Imprimir (IterObject.__próximo__())
Excepto que el teclado segrine:
imprimir ("Ctrl+C está presionado.")
# Terminar desde el bucle cuando se presiona Ctrl+C
romper

Producción

La siguiente salida muestra que el número comenzó a imprimir 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 'Se presiona Ctrl+C.'fue impreso, antes de terminar el guión.

Ejemplo 6: controlar un iterador infinito personalizado

El siguiente script muestra cómo detener el iterador infinito personalizado después de completar un número especificado de iteraciones. El '__iter __ ()'El método de la clase inicializará los valores de'norte' y 'resultado'Variables de clase. El script calculará los cuadrados de los números, comenzando desde 1, que se almacenan en la variable norte, e imprima el valor cuadrado de norte hasta que el valor de norte es mayor que 5. Un infinito mientras el bucle se declara aquí para llamar al '__próximo__()'Método para imprimir el valor cuadrado de norte. Cuando el valor de norte alcance 6, el 'Stopiteración'La señal se generará para terminar el bucle.

# Módulo de tiempo de importación
tiempo de importación
"
Crear una clase para calcular
El cuadrado del número comienza desde 1 hasta
El valor del número es inferior a 6
"
Clase Calculación_Power:
# Inicializar el valor de NUM
def __iter __ (self):
ser.n = 1
ser.resultado = 0
volver a ser
# Calcule el siguiente número que es divisible por 5
def __next __ (self):
# Verificar el valor de n es menor o igual a 5 o no
Si uno mismo.norte <= 5:
ser.resultado = self.N ** 2
tiempo.dormir (0.5)
ser.n += 1
volver a ser.resultado
demás:
elevar la stopiteration
# Crear un objeto de la clase
Objeto = calculate_power ()
# Crear objeto Itererable
iterObject = iter (objeto)
# Definir bucle infinito
Mientras que es cierto:
intentar:
# Vaya a la siguiente iteración e imprima el valor cuadrado
Imprimir ("El cuadrado de %D es %D" %(IterObject.n, iterobject.__próximo__()))
Excepto la paro:
Imprimir ("\ nerminado desde el bucle.")
# Terminar desde el bucle
romper

Producción

La siguiente salida muestra que el iterador personalizado infinito se terminó cuando el valor de n se volvió mayor que 5. El script calculó e imprimió los valores cuadrados de los valores de número de 1 a 5.

Iterando con Itertools

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

Itertools.contar()

El 'ITERTOOLS.contener'La función se puede usar con el'mapa()'Método para generar datos secuenciales y con el'cremallera()'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 ','comenzar,'se usa para definir el valor inicial de la secuencia, y 0 es el valor predeterminado de este parámetro. El segundo parámetro ','paso,'se usa 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. El 'contar()'La función se importa de'Itertools'Al comienzo del guión. El 'my_iterator'El objeto se inicializa con el'contar()'función, con un'comenzar'Valor de 0 y A'paso'Valor de 1. A continuación, el 'sum_result'La variable se inicializa mediante el primer valor del objeto iterable. El valor inicial se inicializa a la variable i y el número de inicio 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 agregarán en cada iteración cuando el 'próximo()se llama al método. Cuando el valor de i se vuelve mayor que norte, El script terminará mostrando el resultado de la suma.

"El siguiente script calculará
la suma de 0 al número que se tomará como entrada.
"
# Recuento de importaciones
del recuento de importaciones de Itertools
# Crea un objeto iterable de count ()
my_iterator = count (start = 0, step = 1)
# Lea el primer valor del iterador
sum_result = next (my_iterator)
# Tomar una entrada de número para terminar el infinito mientras el bucle
n = int (entrada ("Ingrese el valor límite:"))
# Inicializar el valor de i y números
i = sum_result
números = f 'i'
# Declarar infinito bucle
Mientras que es cierto:
# Agregue el número en cada iteración
sum_result += i
i = Next (my_iterator)
# Terminar el bucle si el valor de i es más de n
if (i> n):
romper
# Agregue el valor de número como una cadena con el símbolo '+'
números += " +" +f 'i'
# Imprima el valor final
imprimir (" %s = %d" %(números, sum_result))

Producción

La siguiente salida 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 usar como objeto. Los retornos de objeto iterables de esta función se utilizan para iterar cada valor del objeto que se utilizará como un argumento utilizando el 'próximo()' método. El número de veces los valores del objeto Iterer se basarán 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 de ciclo () de IterTools

El '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'Itertools'Módulo para repetir los datos. Se utiliza una lista de tres números aleatorios como argumento del 'ciclo()' función. El objeto iterable llamado 'num_list'se inicializa mediante el valor de retorno de esta función. El 'contar'La variable se inicializa a 0, y cuando el valor de esta variable se vuelve 6, el 'mientras'Loop finalizará. Entonces el 'mientras'Loop 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
# Generar 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 mostrador
recuento = 0
# Iterar el bucle por 6 veces
Mientras (contar != 6):
print ('El número aleatorio actual es:' + f 'next (num_list)')
recuento+= 1

Producción

La siguiente salida muestra que tres números aleatorios, 3, 17, y 185, han sido generados como elementos de la lista. El bucle se itera seis veces, y estos tres valores se repiten para las siguientes iteraciones.

Itertools.repetir()

La función 'repetir ()' funciona como un iterador infinito y puede tomar dos argumentos. Cuando se omite el segundo argumento, la función 'repetir ()' funciona como un iterador infinito y repite el valor un número infinito de veces. Esta función no ocupa la 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.Repita (valor, límite)

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

Ejemplo 9: Uso de la función repetir () del módulo ITerTools

El 'Itertools'El módulo se importa al comienzo del script para usar el'repetir()' función. Se tomará un valor de cadena del usuario para repetir, y se tomará un valor de número del usuario para establecer el límite de repetición. El valor de retorno del 'repetir()'La función se convertirá en una lista con el'lista()'Método y almacenado en el'datos de listas' variable. Los valores del 'datos de listas'se imprimirá con el'para' bucle.

# Importar módulo ITerTools
Importar iTertools
# Tome el valor de entrada que se repetirá
string = input ("Ingrese una cadena:")
# Tomar el valor numérico para repetir
repetir = int (entrada ("Ingrese el número para repetir:"))
# usando repetir () para agregar repetidamente la cadena a una lista
listData = list (ITerTools.Repita (cadena, repita)))
# Inicilizar I
i = 1
imprimir ("Los valores de la lista son: \ n")
# Iterar la lista usando para bucle
para val en listData:
Imprimir ("Lista del elemento %d = %s" %(i, val))
i += 1

Producción

La siguiente salida 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 intentan explicar con los ejemplos muy simples en este artículo. Los usuarios de Python pueden usar un iterador incorporado 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 explican en este artículo para conocer más detalles del iterador en Python.