Если вы хотите сгенерировать все комбинации, один из способов решить эту проблему - использовать itertools.product
import itertools
engines = ['Engine 1', 'Engine 2', 'Engine 3']
bodies = ['Body 1' ,'Body 2']
seats = ['Seats 1', 'Seats 2']
cars = itertools.product(engines, bodies, seats)
for car in cars:
print(car)
Это даст
('Engine 1', 'Body 1', 'Seats 1')
('Engine 1', 'Body 1', 'Seats 2')
('Engine 1', 'Body 2', 'Seats 1')
('Engine 1', 'Body 2', 'Seats 2')
('Engine 2', 'Body 1', 'Seats 1')
('Engine 2', 'Body 1', 'Seats 2')
('Engine 2', 'Body 2', 'Seats 1')
('Engine 2', 'Body 2', 'Seats 2')
('Engine 3', 'Body 1', 'Seats 1')
('Engine 3', 'Body 1', 'Seats 2')
('Engine 3', 'Body 2', 'Seats 1')
('Engine 3', 'Body 2', 'Seats 2')
Если вы посмотрите на страницу itertools, вы найдете следующий рецепт для случайной генерации продукта
import random
def random_product(*args, repeat=1):
"Random selection from itertools.product(*args, **kwds)"
pools = [tuple(pool) for pool in args] * repeat
return tuple(random.choice(pool) for pool in pools)
Вызов этого с аргументами для деталей
random_product(engines, bodies, seats)
Вернет случайно сгенерированный автомобиль
('Engine 2', 'Body 1', 'Seats 2')