This question pregunta cómo calcular el producto cartesiano de un número dado de vectores. Como la cantidad de vectores se conoce de antemano y es bastante pequeña, la solución se obtiene fácilmente con bucles anidados.¿Cómo puedo calcular un producto cartesiano de forma iterativa?
Ahora supongamos que se le da, en el idioma de su elección, un vector de vectores (o lista de listas, o conjunto de juegos, etc.):
l = [ [1,2,3], [4,5], [6,7], [8,9,10], [11,12], [13] ]
Si se me pidió que calcular su Producto cartesiano, es decir
[ [1,4,6,8,11,13], [1,4,6,8,12,13], [1,4,6,9,11,13], [1,4,6,9,12,13], ... ]
Procederé con la recursividad. Por ejemplo, en rápida & pitón sucia,
def cartesianProduct(aListOfLists):
if not aListOfLists:
yield []
else:
for item in aListOfLists[0]:
for product in cartesianProduct(aListOfLists[1:]):
yield [item] + product
¿Hay una manera fácil de calcular que iterativa?
(Nota: La respuesta no tiene por qué ser en Python, y de todos modos yo soy consciente de que en itertools pitón hace el trabajo mejor, al igual que en this question.)
Yep. Bastante fácil de hecho. Gracias. –
Creo que su código es en realidad un poco más ineficiente que su algoritmo ...; P – Larry
Sí ... tengo otra versión que coincide estrechamente con el algoritmo, pero en el pensamiento era bastante confuso. Tal vez pueda publicarlo de todos modos ... –