在任意多个列表的python中交叉产品

时间:2013-07-12 21:10:13

标签: python list cartesian-product cross-product

我知道您可以按照此处发布的方式获取列表的成对交叉产品:Pairwise crossproduct in Python

但是我想取一个列表L和一个正整数n并返回L的交叉乘积本身n次。是否有内置的方法来执行此操作,还是只需迭代成对的交叉产品?

(对于那些只使用由他们全能的高中数学老师传授给他们的神圣术语的人来说,“笛卡尔产品”......)

1 个答案:

答案 0 :(得分:2)

您正在寻找itertools.product

  

输入迭代的笛卡尔积。

     

等效于生成器表达式中的嵌套for循环。例如,   对于B中的y,product(A,B)返回与(x,y)中的x相同的返回值。

     

嵌套循环像具有最右边元素的里程表一样循环   在每次迭代中前进。这种模式创造了一个词典   排序,以便输入的iterables排序,产品   元组按排序顺序发出。

     

要计算iterable与其自身的乘积,请指定数字   使用可选的repeat关键字参数重复。例如,   产品(A,重复= 4)与产品(A,A,A,A)相同。

所以你只需要做

itertools.product(L, repeat=n)