Itertool functions¶

las siguientes funciones del módulo construyen y devuelven iteradores. Algunos proporcionan flujos de longitud infinita, por lo que solo se debe acceder a ellos mediante funciones o loops que truncan el flujo.

itertools.accumulate(iterable)¶

haga un iterador que devuelva sumas acumuladas, o resultados acumulados de otras funciones binarias (especificados a través del argumento optionalfunc).,

Si se suministra func, debe ser una función de dos argumentos. Los elementos de la entrada iterable pueden ser cualquier tipo que pueda ser aceptado como argumentos a func. (Por ejemplo, con la operación predeterminada de adición, los elementos pueden ser cualquier tipo addabletype incluyendo DecimaloFraction.)

Por lo general, el número de elementos de salida coincide con la entrada iterable.Sin embargo, si se proporciona el argumento de palabra clave initial, la acumulación conduce con el valor inicial para que la salida tenga un elemento más que la entrada iterable.,

aproximadamente equivalente a:

Hay un número de usos para el argumento func. Se puede establecer amin() para un funcionamiento mínimo, max() para una ejecución máxima, ooperator.mul() de un producto. Las tablas de amortización pueden construirse acumulando Intereses y aplicando pagos. Las relaciones de repetición de primer orden se pueden modelar suministrando el valor inicial en el iterable y utilizando únicamente el argumento total acumulado en func:

Ver functools.reduce() para una función similar que devuelve solo el valor final acumulado.,

nuevo en la versión 3.2.

cambiado en la versión 3.3: Se agregó el parámetro func opcional.

cambiado en la versión 3.8: se agregó el parámetro inicial opcional.

itertools.chain(*iterables)¶

haga un iterador que devuelva elementos desde el primer iterable hasta que se agoten, luego continúe con el siguiente iterable, hasta que todos los iterables se agoten. Se utiliza para tratar secuencias consecutivas como una sola secuencia.,Aproximadamente equivalente a:

def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element

classmethodchain.from_iterable(iterable)¶

constructor Alternativo para chain(). Obtiene entradas encadenadas de un único argumento iterable que se evalúa perezosamente. Aproximadamente equivalente a:

def from_iterable(iterables): # chain.from_iterable() --> A B C D E F for it in iterables: for element in it: yield element

itertools.combinations(iterable, r)¶

Regreso a r la longitud de las subsecuencias de elementos a partir de la entrada iterable.,

las tuplas de combinación se emiten en orden lexicográfico de acuerdo con el orden de la entrada iterable. Por lo tanto,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 en su valor. Por lo tanto, si los elementos de entrada son únicos, no habrá valores repetidos en cada combinación.,

aproximadamente equivalente a:

el código para combinations() también se puede expresar como una subsecuencia de permutations() después de filtrar las entradas donde los elementos no están en orden ordenado (de acuerdo con su posición en el grupo de entrada):

el número de elementos devueltos es n! / r! / (n-r)! cuando 0 <= r <= no cero cuando r > n.,

itertools.combinations_with_replacement(iterable, r)¶

devuelve las subsecuencias de longitud de R de los elementos de la entrada iterable permitiendo que los elementos individuales se repitan más de una vez.

las tuplas de combinación se emiten en orden lexicográfico de acuerdo con el orden de la entrada iterable. Por lo tanto,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 en su valor. Por lo tanto, si los elementos de entrada son únicos, las combinaciones generadas también serán únicas.,

aproximadamente equivalente a:

el código para combinations_with_replacement() también se puede expresar como subsecuencia de product() después de filtrar las entradas donde los elementos no están en orden (de acuerdo con su posición en el grupo de entrada):

el número de elementos devueltos es (n+r-1)! / r! / (n-1)! when n > 0.

nuevo en la versión 3.1.,

itertools.compress(data, selectors)¶

haga un iterador que filtre elementos de datos que devuelvan solo aquellos que tengan un elemento correspondiente en los selectores que se evalúe como True.Se detiene cuando se han agotado los datos o los selectores iterables.Aproximadamente equivalente a:

def compress(data, selectors): # compress('ABCDEF', ) --> A C E F return (d for d, s in zip(data, selectors) if s)

de Nuevo en la versión 3.1.

itertools.count(start=0, step=1)¶

haga un iterador que devuelva valores espaciados uniformemente comenzando con number start., A menudo se usa como argumento para map() para generar puntos de datos consecutivos.También se usa con zip() para agregar números de secuencia. Aproximadamente equivalente a:

def count(start=0, step=1): # count(10) --> 10 11 12 13 14 ... # count(2.5, 0.5) -> 2.5 3.0 3.5 ... n = start while True: yield n n += step

cuando se cuenta con números de coma flotante, a veces se puede lograr una mejor precisión sustituyendo código multiplicativo como: (start + step * ifor i in count()).

cambiado en la versión 3.1: se agregó argumento de paso y se permitieron argumentos no enteros.,

itertools.cycle(iterable)¶

Crear un iterador devolver elementos de la iterable y guardar una copia de cada uno.Cuando el iterable se agote, devuelve elementos de la copia guardada. Repito indefinidamente. Aproximadamente equivalente a:

Nota, Este miembro del toolkit puede requerir almacenamiento auxiliar significativo (dependiendo de la longitud del iterable).,

itertools.dropwhile(predicate, iterable)¶

haga un iterador que suelte elementos del iterable siempre que el predicado sea verdadero; después, devuelve cada elemento. Tenga en cuenta que el iterador no produce ninguna salida hasta que el predicado primero se convierte en false, por lo que puede tener un tiempo de inicio de longitud. Aproximadamente equivalente a:

itertools.filterfalse(predicate, iterable)¶

haga un iterador que filtre los elementos de iterable devolviendo solo aquellos para los que el predicado es False., Si el predicado es None, devuelve los elementos que son falsos. Aproximadamente equivalente a:

itertools.groupby(iterable, key=None)¶

haga un iterador que devuelva claves y grupos consecutivos desde el iterable.La clave es una función que calcula un valor clave para cada elemento. Si no se especifica o es None, key por defecto es una función de identidad y devuelve el elemento sin cambios. Generalmente, el iterable ya necesita ser ordenado en la misma función clave.,

el funcionamiento de groupby() es similar al filtro uniq en Unix. Genera un break o un nuevo grupo cada vez que cambia el valor de la función key (por lo que normalmente es necesario haber ordenado los datos usando la misma función Key). Ese comportamiento difiere del grupo de SQL por el cual agrega elementos comunes independientemente de su orden de entrada.

el grupo devuelto es en sí mismo un iterador que comparte la iterablewith groupby()., Debido a que el origen se comparte, cuando el objeto groupby()está avanzado, el grupo anterior ya no es visible. Por lo tanto, si que datais necesitan más tarde, debe ser almacenada en una lista:

groupby() es aproximadamente equivalente a:

itertools.islice(iterable, stop)¶ itertools.islice(iterable, start, stop)

Crear un iterador que devuelve los elementos seleccionados desde el iterable. Si start isnon-zero, entonces los elementos del iterable se omiten hasta que se alcanza start.,Después, los elementos se devuelven consecutivamente a menos que step se establezca más alto que uno, lo que resulta en que los elementos se omitan. Si stop es None, entonces la iteración continúa hasta que el iterador se agote, si es que se agota; de lo contrario, se detiene en la posición especificada. A diferencia del corte regular, islice() no admite valores negativos para start, stop o step. Se puede usar para extraer campos relacionados de datos donde la estructura interna ha sido aplanada (por ejemplo, un informe de líneas múltiples puede listar un campo de nombre en cada tercera línea)., Aproximadamente equivalente a:

si start es None, entonces la iteración comienza en cero. Si el paso es None, el paso por defecto es uno.

itertools.permutations(iterable, R=None)¶

devuelve permutaciones sucesivas de longitud r de elementos en el iterable.

si r no está especificado o es None, entonces r tiene por defecto la longitud de la iterable y se generan todas las permutaciones posibles de longitud completa.

las tuplas de permutación se emiten en orden lexicográfico de acuerdo con el orden de la entrada iterable., Por lo tanto,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 en su valor. Así que si los elementos de entrada son únicos, no habrá valores repetidos en cada permutación.,

aproximadamente equivalente a:

el código para permutations() también se puede expresar como una subsecuencia deproduct(), filtrado para excluir entradas con elementos repetidos (desde la misma posición en el grupo de entrada):

el número de elementos devueltos es n! / (n-r)! cuando 0 <= r <= no cero cuando r > n.

itertools.product(*iterables, repeat=1)¶

producto cartesiano de iterables de entrada.,

Los bucles anidados circulan como un odómetro con el elemento más a la derecha avanzando en cada iteración. Este patrón crea un orden lexicográfico de modo que si se ordenan los iterables de entrada, las tuplas de producto se emiten en orden de clasificación.

para calcular el producto de un iterable consigo mismo, especifique el número de repeticiones con el argumento opcional repeat keyword. Por ejemplo,product(A, repeat=4) significa lo mismo como product(A, A, A, A).,

esta función es aproximadamente equivalente al siguiente código, excepto que la implementación real no acumula resultados intermedios en memoria:

antes de que product() se ejecute, consume completamente los iterables de entrada,manteniendo grupos de valores en memoria para generar los productos. En consecuencia, solo es útil con entradas finitas.

itertools.repeat(object)¶

haga un iterador que devuelva el objeto una y otra vez. Se ejecuta indefinidamente sin especificar el argumento times., Se utiliza como argumento para map() forinvariant parameters to the called function. También se usa con zip() para crear una parte invariante de un registro de tupla.

aproximadamente equivalente a:

un uso común para la repetición es proporcionar un flujo de valores constantes a mapor zip:

>>> list(map(pow, range(10), repeat(2)))

itertools.starmap(function, iterable)¶

hacer un iterador que calcula la función usando argumentos obtenidos del iterable., Se usa en lugar de map() cuando los parámetros del argumento ya están agrupados en tuplas desde un único iterable (los datos han sido «pre-comprimidos»). La diferencia entre el map() y starmap() parallels la distinctionbetween function(a,b) y function(*c). Aproximadamente equivalente a:

def starmap(function, iterable): # starmap(pow, ) --> 32 9 1000 for args in iterable: yield function(*args)

itertools.takewhile(predicate, iterable)¶

haga un iterador que devuelva elementos del iterable siempre que el predicado sea verdadero., Aproximadamente equivalente a:

def takewhile(predicate, iterable): # takewhile(lambda x: x<5, ) --> 1 4 for x in iterable: if predicate(x): yield x else: break

itertools.tee(iterable, n=2)¶

Volver n independiente de los iteradores de una sola iterable.

el siguiente código Python ayuda a explicar lo que hace tee (aunque la implementación actual es más compleja y utiliza solo una cola subyacente FIFO).

aproximadamente equivalente a:

Una vez que tee() ha hecho una división, el iterable original no debe ser utilizado en ningún otro lugar; de lo contrario, el iterable podría ser avanzado sin que los objetos tee sean informados.,

tee iteradores no son de subprocesos. Una RuntimeError puede ser repuesta cuando se usan simultáneamente iteradores devueltos por la misma llamada tee(), incluso si el iterable original es threadsafe.

esta itertool puede requerir un almacenamiento auxiliar significativo (dependiendo de la cantidad de datos temporales que se deban almacenar). En general, si un iterador utiliza casi todos los datos antes de que se inicie otro iterador, es más rápido usarlist() en lugar de tee().,

itertools.zip_longest(*iterables, fillvalue=None)¶

haga un iterador que agregue elementos de cada uno de los iterables. Si las letras son de longitud desigual, los valores faltantes se rellenan con fillvalue.La iteración continúa hasta que se agote el iterable más largo. Aproximadamente equivalente a:

si uno de los iterables es potencialmente infinito, entonces la función zip_longest() debe estar envuelta con algo que limite el número de llamadas(por ejemplo islice() o takewhile())., Si no se especifica,el valor de relleno predeterminado es None.