Programa Python para aplicar itertools.product a elementos de una lista de listas

Itertools es un módulo que consiste en los métodos para aplicar varias operaciones basadas en iteraciones, incluidas combinaciones, permutaciones, etc., en los componentes iterables en Python. Tiene un conjunto de herramientas ligeras, eficientes en memoria y rápidas para realizar álgebra de iteración .

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

itertools.producto()

Se utiliza para realizar productos cartesianos dentro de una lista o entre listas. Los bucles anidados ciclan de manera que el elemento más a la derecha avanza en cada iteración. Este patrón crea un ordenamiento lexicográfico y, por lo tanto, si los iterables de entrada están ordenados, las tuplas de productos también están ordenadas.

Toma iterables como parámetro. El siguiente ejemplo muestra una representación muy simple del itertools.product()método. Aquí se utiliza como creación de un producto cartesiano.

Ejemplo:

import itertools
  
  
def product(str1, str2):
      
    # returning the list containing 
    # cartesian product
    return [x for x in itertools.product(list(str1),
                                         list(str2))]
  
print(product("GfG", "GFG"))

Producción:

[(‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’), (‘f’, ‘G’), (‘f’, ‘F’) , (‘f’, ‘G’), (‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’)]

Operando en lista de listas

Para usar itertools.product()el método en la lista de listas, realice primero la operación de desempaquetado. Se puede hacer de dos formas:

  • Al descomprimir la lista dentro de la función

    El siguiente ejemplo muestra cómo se puede realizar el desempaquetado mediante una operación simple dentro del método.

    import itertools
      
      
    def product(list_of_str):
          
        str1 = list_of_str[0]
        str2 = list_of_str[1]
          
        # returning the list 
        # containing cartesian product
        return [x for x in itertools.product(list(str1),
                                             list(str2))]
      
    print(product(["GfG", "GFG"]))

    Producción

    [(‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’), (‘f’, ‘G’), (‘f’, ‘F’) , (‘f’, ‘G’), (‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’)]

    La desventaja de esta forma es que requiere información adicional para ser conocida, es decir, la longitud de la lista dentro de las listas.

  • Usando el operador ‘*’

    Para superar la desventaja mencionada anteriormente, se utiliza ‘*’ para desempaquetar las listas dentro de la lista. Entonces, el código anterior se puede optimizar de la siguiente manera:

    import itertools
      
      
    def product(lst):
          
        # Unpack operation performed
        # by '*' operator and returning
        # the list containing cartesian
        # product
        return [x for x in itertools.product(*lst)]
      
      
    # list of lists being passed in the method
    print(product(["GfG", "GFG"]))

    Producción

    [(‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’), (‘f’, ‘G’), (‘f’, ‘F’) , (‘f’, ‘G’), (‘G’, ‘G’), (‘G’, ‘F’), (‘G’, ‘G’)]

Publicación traducida automáticamente

Artículo escrito por piyush25pv 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 *