6

我正在尝试从每个维度的最小值和最大值列表中获取 n 维立方体的坐标。我可以使用 for 循环来获得角落,但我想概括任意数量的维度。

例如:

mins = [-1,-2,-3]
maxes = [1,2,3]

将给出坐标:

(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3),
(1, 2, 3), (1, 2, -3), (1, -2, 3), (1, -2, -3)

这实质上是通过两个列表查找所有路径,为每个索引从其中一个列表中选择一个值。我已经看到了给出路径数量或最快路径的算法,但我还没有找到一个枚举所有可能路径的算法。

我假设 itertools 会进入解决方案,但无法弄清楚如何以提供所需结果的方式使用产品、排列和组合。最接近的是:

list(itertools.product((xmin, xmax), (ymin, ymax), (zmin, zmax)))
4

1 回答 1

10

你非常接近,*zip( ... )是你正在寻找的:

>>> list(itertools.product(*zip([-1,-2,-3],[1,2,3])))
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (
, 2, -3), (1, 2, 3)]
于 2011-11-08T23:42:18.243 回答