Python – Itertools.acumular()

El módulo itertools de Python es una colección de herramientas para manejar iteradores.

Según la documentación oficial:

«Módulo [que] implementa una serie de bloques de construcción de iteradores inspirados en construcciones de APL, Haskell y SML… Juntos, forman un ‘álgebra de iteradores’ que hace posible construir herramientas especializadas de manera sucinta y eficiente en Python puro». esto básicamente significa que las funciones en itertools “operan” en iteradores para producir iteradores más complejos.

En pocas palabras, los iteradores son tipos de datos que se pueden usar en un bucle for. El iterador más común en Python es la lista.

Vamos a crear una lista de strings y llamarla colores. Podemos usar un bucle for para iterar la lista como:

colors = ['red', 'orange', 'yellow', 'green']
  
# Iterating List
for each in colors:
    print(each)
Producción:

red
orange
yellow
green

Hay muchos tipos diferentes de iterables, pero por ahora usaremos listas y conjuntos.

Requisitos para trabajar con itertools

Debe importar el módulo itertools antes de usar. También tenemos que importar el módulo de operador porque queremos trabajar con operadores.

import itertools
import operator ## only needed if want to play with operators

El módulo Itertools es una colección de funciones. Vamos a explorar una de estas funciones de acumulación() .

Nota: Para obtener más información, consulte Python Itertools

acumular()

Este iterador toma dos argumentos, el objetivo iterable y la función que se seguiría en cada iteración del valor en el objetivo. Si no se pasa ninguna función, la adición se realiza de forma predeterminada. Si el iterable de entrada está vacío, el iterable de salida también estará vacío.

Sintaxis
itertools.accumulate(iterable[, func]) –> acumular objeto

Esta función hace un iterador que devuelve los resultados de una función.

Parámetros
iterables y función

Ahora es suficiente de la parte teórica, juguemos con el código.

Código: 1

# import the itertool module 
# to work with it
import itertools
  
# import operator to work 
# with operator
import operator
  
# creating a list GFG
GFG = [1, 2, 3, 4, 5]
  
# using the itertools.accumulate() 
result = itertools.accumulate(GFG, 
                              operator.mul)
  
# printing each item from list
for each in result:
    print(each)
Producción:

1
2
6
24
120

Explicación :

El operator.mul toma dos números y los multiplica.

operator.mul(1, 2)
2
operator.mul(2, 3)
6
operator.mul(6, 4)
24
operator.mul(24, 5)
120

Ahora, en el siguiente ejemplo, usaremos la función max ya que también toma una función como parámetro.

Código 2:

# import the itertool module 
# to work with it
import itertools
  
# import operator to work with
# operator
import operator
  
# creating a list GFG
GFG = [5, 3, 6, 2, 1, 9, 1]
  
# using the itertools.accumulate()
  
# Now here no need to import operator
# as we are not using any operator
# Try after removing it gives same result
result = itertools.accumulate(GFG, max)
  
# printing each item from list
for each in result:
    print(each)
Producción:

5
5
6
6
6
9
9

Explicación:

5
max(5, 3)
5
max(5, 6)
6
max(6, 2)
6
max(6, 1)
6
max(6, 9)
9
max(9, 1)
9

Nota: La función de aprobación es opcional, ya que si no aprobará ninguna función, los elementos se sumarán, es decir, se agregarán de manera predeterminada.

itertools.accumulate(set.difference)
Esta acumulación de devolución de elementos de diferencia entre conjuntos.

Código para explicar

# import the itertool module to
# work with it
import itertools
  
  
# creating a set GFG1 and GFG2
GFG1 = { 5, 3, 6, 2, 1, 9 }
GFG2 ={ 4, 2, 6, 0, 7 }
  
# using the itertools.accumulate()
  
# Now this will first give difference 
# and the give result by adding all 
# the element in result as by default
# if no function  passed it will add always
result = itertools.accumulate(GFG2.difference(GFG1))
  
# printing each item from list
for each in result:
    print(each)
Producción:

0
4
11

Publicación traducida automáticamente

Artículo escrito por YashKhandelwal8 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *