Python Itertools-Funciones que crean Iteradores para un bucle eficiente.

Python Itertools:
Este módulo estandariza un conjunto básico de herramientas rápidas y eficientes en memoria que son útiles por sí mismas o en combinación. Juntos, forman un "iterator algebra”
que hace posible construir herramientas especializadas de forma sucinta y eficiente en Python puro.
El módulo itertools de Python está disponible en la Biblioteca Estándar de Python.
Tipos de Iteradores que proporciona este módulo:
- Iteradores infinitos
- Iteradores que terminan en la secuencia de entrada más corta
- Iteradores combinatorios
El tipo de retorno será el objeto Iterator.Podemos iterar a través del iterador mediante
- usando la función next()
- usando el bucle for
- convirtiendo a objeto lista usando list()
- Count():
Hace un iterador que devuelve valores espaciados uniformemente empezando por el número especificado en el argumento start.Por defecto start es 0 y step es 1.Esta función devuelve un iterador infinito. - acumular():
Hace un iterador que devuelve la suma acumulada o los resultados acumulados de otras funciones binarias que se mencionan en el parámetro func.
En general, el número de elementos en el iterable de salida coincide con el número de elementos en el iterable de entrada.Si se menciona el parámetro inicial, se acumula, por lo que el iterable de salida contiene un elemento más que el iterable de entrada.functools.reduce()
devuelve sólo el valor final acumulado para una función similar.
El parámetro inicial se introduce enPython version 3.8
- producto():
Producto cartesiano de iterables de entrada.
Definición de producto cartesiano: El producto del conjunto X y el conjunto Y es el conjunto que contiene todos los pares ordenados ( x, y ) para los que x pertenece a X e y pertenece a Y.
Para calcular el producto de un iterable consigo mismo, especifique el número de repeticiones con el argumento opcional de la palabra clave repeat. Por ejemplo, product(A, repeat=4) significa lo mismo que product(A, A, A, A).
Iteradores infinitos:
count(),cycle(),repeat()
itertools.count(start=0,step=1)
También se utiliza como argumento en las funciones map() y zip().
zip()
-la función zip() es una función integrada en Python que permite combinar los elementos correspondientes de múltiples secuencias y devolver el objeto zip que es un iterador de tuplas. itertools.count()
se puede utilizar como secuencia en la función zip().
map()
-La función map() de Python se utiliza para aplicar la función a todos los elementos del iterable especificado y devuelve un objeto map que es un iterador. Podemos utilizar itertools.count() como argumento en la función map().
2. cycle():
Hace un iterador devolviendo elementos del iterable y guardando una copia de cada uno.Cuando el iterable se agota,devuelve el elemento de la copia guardada.Se repite indefinidamente.
itertools.cycle(iterable)
3.repeat():
Hace un iterador que devuelve el objeto una y otra vez.Se ejecuta indefinidamente a menos que se mencione el argumento times.
Se utiliza como argumento en la función map() y zip().
itertools.repeat(object,times)
Se utiliza como argumento en la función map().
Se utiliza como argumento en la función zip().
Iteradores que terminan en la secuencia de entrada más corta:
itertools.accumulate(iterable,func,*,initial=None)
2. chain():
Hace un iterador que devuelve el elemento del primer iterable hasta que se agota, y luego pasa al siguiente iterable. Tratará las secuencias consecutivas como una única secuencia.itertools.chain(*iterables)
3. chain.from_iterable():
Esta función toma un iterable como argumento de entrada y devuelve un iterable aplanado que contiene todos los elementos del iterable de entrada. Todos los elementos del iterable de entrada deben ser iterables, de lo contrario se producirá un TypeError.
chain.from_iterable(iterable)
4. comprimir():
Hacer un iterador que filtre los elementos de los datos devolviendo sólo aquellos que tengan un elemento correspondiente en los selectores que se evalúe como True.Se detiene cuando se han agotado los iterables de los datos o de los selectores.
itertools.compress(data,selectors)
5.dropwhile():
Hacer un iterador que deje caer elementos del iterable mientras el predicado sea True,después devuelve cada elemento.El iterador no produce ninguna salida hasta que el predicado se convierta primero en False.
itertools.dropwhile(predicate,iterable)
6.takewhile():
Hace un iterador que devuelve elementos del iterable mientras el predicado sea True.
itertools.takewhile(predicate,iterable)
7. filterfalse():
Hace un iterador que filtra los elementos del iterable devolviendo sólo aquellos para los que el predicado es False.Si el predicado es None,devuelve los elementos que son False.filter()
El método devuelve un iterador que contiene los elementos de un iterable para los que la función devuelve True.
itertools.filterfalse(predicate,iterables)
8.zip_longest():
Hace un iterador que agrega elementos de cada uno de los iterables. Si los iterables tienen una longitud desigual, el valor que falta se rellena con el valor de relleno. La iteración continúa hasta que se agota el iterable más largo.
En zip(), la iteración continúa hasta que se agota el iterable más corto.
itertools.zip_longest(*iterables,fillvalue=None)
9. starmap():
Hace un iterador que calcula la función usando los argumentos obtenidos del iterable. Se utiliza en lugar de map() cuando los parámetros de los argumentos ya están agrupados en tuplas a partir de un único iterable (los datos han sido «precomprimidos»).
itertools.starmap(function,iterable)
10. islice():
Hace un iterador que devuelve elementos seleccionados del iterable. Si start es None
, la iteración comienza en cero. Si step es None
, entonces el paso es por defecto uno.Si stop es None
, entonces la iteración continúa hasta que el iterador se agota, si es que lo hace; de lo contrario, se detiene en la posición especificada. islice()
no admite valores negativos para start,stop y step.
itertools.islice(iterable,stop)
itertools.islice(iterable, start, stop)
11.tee():
Devuelve n iteradores independientes de un único iterable.
itertools.tee(iterable,n=2)
12. groupby():
Hacer un iterador que devuelva claves y grupos consecutivos del iterable.
key es una función que calcula el valor de la clave para cada elemento.Si no se especifica key o None,key se convierte por defecto en una función de identidad y devuelve el elemento sin cambios.
itertools.groupby(iterable,key=None)
Iteradores combinatorios:
itertools.product(*iterables,repeat)
2. permutaciones():
Devuelve sucesivas r
permutaciones de longitud de los elementos del iterable. Si no se especifica r o es None, entonces r es por defecto la longitud del iterable y se generan todas las permutaciones posibles de longitud completa.Las tuplas de permutación se emiten en orden lexicográfico según el orden del iterable de entrada. Así, si el iterable de entrada está ordenado, las tuplas de combinación se producirán en orden ordenado.
Los elementos se tratan como únicos en función de su posición, no de su valor. Así que si los elementos de entrada son únicos, no habrá valores repetidos en cada permutación.
itertools.permutations(iterable,r=None)
Nota:En Permutaciones, el orden de los elementos importa.
3. combinaciones():
Devuelve r
secuencias de longitud de elementos del iterable de entrada.
Las tuplas de combinaciones se emiten en orden lexicográfico según el orden del iterable de entrada. Así, si el iterable de entrada está ordenado, las tuplas de combinación se producirán en orden ordenado.
Ordenación lexicográfica significa forma de ordenar las palabras en orden alfabético de las letras que las componen.
Los elementos se tratan como únicos en función de su posición, no de su valor. Por lo tanto, si los elementos de entrada son únicos, no habrá valores repetidos en cada combinación.
itertools.combinations(iterable, r)
4. combinations_with_replacement():
Devuelve r
subsecuencias de longitud de elementos del iterable de entrada permitiendo que elementos individuales se repitan más de una vez.
itertools.combinations_with_replacement(iterable, r)
Note:
1. Used as an argument in map() and zip():
count(),repeat()
repeat()- supply stream of constant values to map() or zip() function.
count()-it will supply different values to map() or zip() function.2.Difference between cycle() and repeat():
cycle()-iterates over the same object again and again
repeat()-returns the same object again and again.3.Difference between reduce() and itertools.accumulate():
reduce():
* It will return only the final accumulated value.
* First argument should be function and second argument should be iterable.
accumulate()
* It will return the running accumulated value.The elements in the output iterable will be equal to elements in the input iterable,if initial value is not mentioned.
* First argument should be iterable and second argument should be function.4.Difference between filter() and itertools.compress():
* filter()function-filters the given iterable with the help of function that test each element in the iterable is True or not.
* compress():filters the given iterable based on the corresponding element in the selector. Iterable containing True /False is given as selector.5.Difference between filter() and itertools.filterfalse():
*filter():Construct an iterator from the elements of iterable for which function returns True.
*filterfalse():Construct an iterator from the elements of iterable for which function returns False.6.Difference between zip() and itertools.zip_longest():
*zip():Iteration continues until shortest iterable is exhausted.
*zip_longest():Iteration continues until longest iterable is exhausted.7.Difference between list slicing and itertools.islice():
*List slicing creates new list
*islice()-Returns an iterator.We can loop through the iterator,in the way we want.
8.Difference between itertools.permutations() and itertools.combinations():
* itertools.permutations():Order of the elements does matters.
*itertools.combinations():Order of the elements doesn’t matters.
Both combinations and permutations doesn’t repeat values.
9.Difference between itertools.combinations() and itertools.combinations_with_replacement
* combinations():Order of element doesn’t matters and doesn’t repeat values.
* combinations_with_replacement():Order of element doesn’t matters and it repeats values.10.Difference between itertools.takewhile() and itertools.dropwhile():
* takewhile():Make an iterator that returns element from the iterable as long as the predicate is True.
* dropwhile():Make an iterator that drops element from the iterable as long as the predicate is True afterwards returns every element.