我需要一些有关如何在Python上执行以下工程场景的指导

时间:2019-07-11 05:39:30

标签: python hierarchical-data

我有一个制造场景,其中有8个不同的篮子。每个篮子都有不同类型的零件。从每个购物篮中挑出一个或多个零件来制造一辆汽车,我想制造尽可能多的汽车版本,这是我期望的解决方案。可以从每个购物篮中随机挑选零件(例如:可以从购物篮2挑选5号零件,然后选择5号零件),但是零件必须从购物篮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)

1 个答案:

答案 0 :(得分:0)

如果您希望生成所有组合,则解决此问题的方法之一是使用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)

使用args调用零件

 random_product(engines, bodies, seats)

将返回随机生成的汽车

('Engine 2', 'Body 1', 'Seats 2')