Python 动态地为itertools提供嵌套列表

Python 动态地为itertools提供嵌套列表,python,itertools,cartesian-product,Python,Itertools,Cartesian Product,我有6个列表:pool\ux、pool\uy、pool\uz、global\ux、global\uy、global\uz和一组唯一点。我使用itertools对这些列表进行笛卡尔积是一种特定的方式: for element in itertools.product(pool_x, pool_y, pool_z): unique_points.add(element) for element in itertools.product(glob

我有6个列表:
pool\ux、pool\uy、pool\uz、global\ux、global\uy、global\uz
和一组
唯一点
。我使用
itertools
对这些列表进行笛卡尔积是一种特定的方式:

        for element in itertools.product(pool_x, pool_y, pool_z):
            unique_points.add(element)
        for element in itertools.product(global_x, pool_y, pool_z):
            unique_points.add(element)
        for element in itertools.product(pool_x, global_y, pool_z):
            unique_points.add(element)
        for element in itertools.product(pool_x, pool_y, global_z):
            unique_points.add(element)
但正如你们所看到的,这是一种硬编码方式。上述代码适用于3个尺寸。在2维中:我的列表只有4个,即
pool\u x,pool\u y,global\u x,global\u y
,代码如下:

        for element in itertools.product(pool_x, pool_y):
            unique_points.add(element)
        for element in itertools.product(pool_x, global_y):
            unique_points.add(element)
        for element in itertools.product(global_x, pool_y):
            unique_points.add(element) 
问题现在我想将此代码扩展到任何维度。为此,到目前为止,我已经实现了创建嵌套列表:
pool
(包括pool_x、pool_y、pool_z,具体取决于任何维度)和
globals
(包括global_x、global_y等)。然后,第一个笛卡尔积(位于池之间)可以通过以下方式实现:

        for element in itertools.product(*pools):
            unique_points.add(element)

但是,如何像前面的代码对二维和三维所做的那样,在池和全局之间生成所有笛卡尔积呢?如果新的动态代码给出的对与上述硬编码代码给出的对相同,则可以验证正确性。或者任何其他的方法也很受欢迎。

最后,我自己找到了答案

        for i in range(self.dimensions):
            temp_pools = list(self.pools)  # make new list of pools so that original pools stays untouched
            temp_pools[i] = self.globals[i]  # <= main thing
            for element in itertools.product(*temp_pools):
                self.unique_points.add(element)
范围内i的
(自尺寸):
temp_pools=list(self.pools)#创建新的池列表,以便原始池保持不变

temp_pools[i]=self.globals[i]#所以,你想要某个特定大小的任意组合的乘积…?把像点想象成坐标平面中的向量,例如(1,2,3)。第一个数字是x轴,第二个是y轴,第三个是z轴。我所要做的就是通过池和全局的笛卡尔积来实现这些点的所有可能组合。你已经知道了如何做:把所有的列表放在一个更大的列表中,然后取它的
积。@Prune如果我把所有的列表放在一个更大的列表中,向量的长度会很大。但是向量的长度应该等于dimensions@prune这个问题与您将其相似性与之关联的问题不同。请重新打开它。该问题不适用于嵌套列表。我也检查并评论了那里