Picking unordered combinations from pools with overla

Tengo grupos de valores y me gustaría generar todas las combinaciones desordenadas posibles seleccionando de ciertos grupos.

Por ejemplo, quería elegir del grupo 0, grupo 0 y grupo 1:

>>> pools = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>> part = (0, 0, 1)
>>> list(product(*(pools[i] for i in part)))
[(1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 2), (2, 3, 3), (2, 3, 4), (3, 1, 2), (3, 1, 3), (3, 1, 4), (3, 2, 2), (3, 2, 3), (3, 2, 4), (3, 3, 2), (3, 3, 3), (3, 3, 4)]

Esto genera todas las combinaciones posibles al elegir del grupo 0, grupo 0 y grupo 1.

Sin embargo, el orden no me importa, por lo que muchas de las combinaciones son en realidad duplicadas. Por ejemplo, como utilicé un producto cartesiano, tanto(1, 2, 4) y(2, 1, 4) son generadas

Se me ocurrió un método simple para mitigar este problema. Para los miembros elegidos de un solo grupo, selecciono sin ordenar usandocombinations_with_replacement. Cuento cuántas veces quiero sacar de cada grupo. El código se ve así:

cnt = Counter()
for ind in part: cnt[ind] += 1
blocks = [combinations_with_replacement(pools[i], cnt[i]) for i in cnt]
return [list(chain(*combo)) for combo in product(*blocks)]

Esto reduce los pedidos de duplicados si elijo el mismo grupo varias veces. Sin embargo, todos los grupos tienen mucha superposición, y el uso decombinations_with_replacement en varios grupos combinados generaría algunas combinaciones no válidas. ¿Existe un método más eficiente para generar combinaciones desordenadas?

Edit: Información adicional sobre las entradas: el número de partes y grupos es pequeño (~ 5 y ~ 20), y por simplicidad, cada elemento es un número entero. El problema real ya lo he resuelto, así que esto es solo por interés académico. Digamos que hay miles cientos de enteros en cada grupo, pero algunos grupos son pequeños y solo tienen docenas. Entonces, algún tipo de unión o intersección parece ser el camino a seguir.

Respuestas a la pregunta(6)

Su respuesta a la pregunta