我需要一些关于如何在 Python 上执行以下工程场景的指导
I need some guidance on how to do the following engineering scenario on Python
我有一个制造场景,其中有 8 个不同的篮子。每个篮子都有不同类型的零件。从每个篮子中挑选 1 个或多个零件来制造一辆汽车,我想制造尽可能多的汽车版本,这是我预期的解决方案。可以从每个篮子中随机挑选零件(例如:第 15 号零件可以在第 5 号零件之前从篮子 2 中选择),但它必须从篮子 1 流向篮子 8(例如:篮子 3 不能在篮子 2 之前)。一切都是基于文本的,这意味着篮子 1 到 8 是列表,汽车零件是各自列表中的文本条目。为了清楚起见,请检查下面的小例子。有人可以指导我如何创建这样一个场景,我可以逐步生成随机排列的汽车吗?我对 Python.
有非常基本的了解
1. Engine (Eng 1,Eng 2, Eng 3)
2. Body (Body 1, Body 2, Body 3)
3. Seats (Seat 1, Seat 2, Seat 3)
4. Solution (eng 1+body 3+seat 1+seat3), (eng 1+body 1+seat 1)...,(eng n+body n+seat n)
如果您希望生成所有组合,解决此问题的方法之一是使用 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)
会return一辆随机生成的汽车
('Engine 2', 'Body 1', 'Seats 2')
我有一个制造场景,其中有 8 个不同的篮子。每个篮子都有不同类型的零件。从每个篮子中挑选 1 个或多个零件来制造一辆汽车,我想制造尽可能多的汽车版本,这是我预期的解决方案。可以从每个篮子中随机挑选零件(例如:第 15 号零件可以在第 5 号零件之前从篮子 2 中选择),但它必须从篮子 1 流向篮子 8(例如:篮子 3 不能在篮子 2 之前)。一切都是基于文本的,这意味着篮子 1 到 8 是列表,汽车零件是各自列表中的文本条目。为了清楚起见,请检查下面的小例子。有人可以指导我如何创建这样一个场景,我可以逐步生成随机排列的汽车吗?我对 Python.
有非常基本的了解 1. Engine (Eng 1,Eng 2, Eng 3)
2. Body (Body 1, Body 2, Body 3)
3. Seats (Seat 1, Seat 2, Seat 3)
4. Solution (eng 1+body 3+seat 1+seat3), (eng 1+body 1+seat 1)...,(eng n+body n+seat n)
如果您希望生成所有组合,解决此问题的方法之一是使用 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)
会return一辆随机生成的汽车
('Engine 2', 'Body 1', 'Seats 2')