У меня есть 6 списков: pool_x, pool_y, pool_z, global_x, global_y, global_z
и один набор unique_points
. Я использую 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_x, pool_y, global_x, global_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)
Вопрос Теперь я хочу масштабировать этот код до любое измерение . Для этого до сих пор я создал вложенные списки: pools
(включая pool_x, pool_y, pool_z в зависимости от любого измерения) и globals
(включая global_x, global_y et c.). Затем можно получить первый декартовый продукт (который находится между пулами):
for element in itertools.product(*pools):
unique_points.add(element)
Но как сделать все декартовы произведения между пулами и глобальными переменными так же, как предыдущий код делает для 2 Dimension и 3 Размер? Корректность может быть подтверждена, если новый динамический код c дает нам те же пары, что и код, указанный выше. ИЛИ любой другой способ сделать это также приветствуется.