计算笛卡尔积
笛卡尔积又名直积,是所有可能的有序对组成的集合,其中有序对的第一个对象是X的成员,第二个对象是Y的成员。可以表示如下:
\[X\times Y={<x,y>|x\in X\land y\in Y}\]
例如,[[a,b],[1,2,3]]的笛卡尔积为[[a,1],[a,2],[a,3],[b,1],[b,2],[b,3]]
在实际应用中,笛卡尔积常用于在电商中生成商品的sku信息,将所有的属性组合起来。
当空间数量固定时,可以直接使用嵌套的循环来完成,例如上面的二元笛卡尔积:
1 | let a = ['a','b'] |
output>>>
1 | [ [ 'a', '1' ], |
推广到n元笛卡尔积:
\[ X_{1}\times X_{2}\times ...\times X_{n}={(x_{1},...,x_{n})|x_{1}\in X_{1}\land ...\land x_{n}in X_{n}}\]
1 | for(let i=0;i<a.length;i++){ |
当n不为固定数值的时候,不能以这种嵌套循环的方式表示。因此考虑使用嵌套
1 | import copy |
output>>>
1 | [['a', '1'], ['a', '2'], ['a', '3'], ['b', '1'], ['b', '2'], ['b', '3']] |
对于python来说,除了使用遍历之外也可以使用py自带的迭代器itertools:
1 | import itertools |
output>>>
1 | [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3)] |