[Python] función itertools.producto


itertools. producto ( *iterables , repetir=1 )

Producto cartesiano (Producto cartesiano) de iterables de entrada.

Aproximadamente equivalente a bucles for anidados en una expresión de generador. Por ejemplo, producto(A, B) devuelve lo mismo que ((x,y) para x en A para y en B).

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

Para calcular el producto de un iterable consigo mismo, especifique el número de repeticiones con el argumento de palabra clave de repetición opcional. Por ejemplo, producto (A, repetición = 4) significa lo mismo que producto (A, A, A, A).

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

def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)

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

Documentación oficial:

https://docs.python.org/3.10/library/itertools.html#itertools.product

Supongo que te gusta

Origin blog.csdn.net/weixin_66896881/article/details/128686696
Recomendado
Clasificación