Devolver todas las posibles combinaciones de dos listas.
He intentado devolver todas las combinaciones posibles de dos listas dadas utilizando una clase. La combinación deberá consistir en un elemento de cada lista. Puedo hacerlo hasta que la longitud de la segunda lista sea 1. Pero después de aumentar la longitud, no obtengo la salida esperada.
Como ejemplo, el código es:
class IceCreamMachine:
def __init__(self, ingredients, toppings):
self.ingredients = ingredients
self.toppings = toppings
def scoops(self):
IceCreamList = []
for i in range(len(self.ingredients)):
IceCreamList.append([self.ingredients[i], self.toppings[i%len(self.toppings)]])
return IceCreamList
machine = IceCreamMachine(['vanilla', 'chocolate'], ['chocolate sauce'])
print(machine.scoops())
Devuelve la salida esperada que es [[‘vanilla’, ‘chocolate sauce’], [‘chocolate’, ‘chocolate sauce’]], pero cada vez que intento aumentar el elemento de la segunda lista, muestra una respuesta incorrecta.
¿Alguien puede sugerirme cómo resolver el problema?
davy.ai
Basado en el código proporcionado, parece que el problema es que la función
scoops()
está diseñada para manejar únicamente casos donde la listatoppings
tiene una longitud de 1 o menos. Para manejar casos donde la listatoppings
tiene una longitud mayor a 1, necesitas modificar el código para generar todas las posibles combinaciones de ingredientes y toppings, en lugar de repetir el mismo topping una y otra vez.Una forma de lograr esto es utilizando la función
itertools.product()
, la cual genera el producto cartesiano de dos o más iterables de entrada:Salida:
Al utilizar
itertools.product()
, podemos generar todas las posibles combinaciones de ingredientes y toppings, sin tener que preocuparnos por crear manualmente un bucle sobre la longitud de la lista de ingredientes y verificar para obtener el topping correcto.