📜  将 itertools.product 应用于列表列表元素的Python程序

📅  最后修改于: 2022-05-13 01:54:27.030000             🧑  作者: Mango

将 itertools.product 应用于列表列表元素的Python程序

Itertools 是一个模块,由在Python中的可迭代组件上应用各种基于迭代的操作(包括组合、排列等)的方法组成。它有一套用于执行迭代器代数的轻量级、内存效率高和快速的工具。

注意:更多信息请参考Python Itertools

itertools.product()

它用于在列表中或列表之间执行笛卡尔积。嵌套循环以最右边的元素在每次迭代中前进的方式循环。这种模式创建了一个字典顺序,因此如果输入的迭代是排序的,那么产品元组也是排序的。

它将迭代作为参数。下面的示例显示了itertools.product()方法的一个非常简单的表示。在这里,它被用作笛卡尔积的创建。

例子:

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"))

输出:

对列表列表进行操作

要在列表列表上使用itertools.product()方法,请先执行解包操作。可以使用两种方式完成:

  • 通过解包函数内部的列表

    下面的例子展示了如何通过方法内的简单操作进行解包。

    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"]))
    

    输出

    这种方式的缺点是,它需要知道额外的信息,即列表中列表的长度。

  • 使用“*”运算符

    为了克服上述缺点,'*' 用于解包列表中的列表。所以上面的代码可以优化如下:

    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"]))
    

    输出