以下问题可能有点令人困惑,但我将尝试以最佳方式进行解释。
让我们假设我们在一家制造公司工作。哪个制造然后用于制造产品的组件。在下面的示例中,有3个组件和2个最终产品。
组件和产品的需求如下:
comp1 = 7
comp2 = 3
comp3 = 4
prod1 = 2
prod2 = 1
prod3 = 0
可以将其保存在词典中
clst = {"comp": [comp1, comp2, comp3], "prod": [prod1, prod2, prod3]}
另一方面,要制造最终产品,组件要求如下:
prod1需要:2个comp1,1个comp2,1个comp3
prod2需要:3个comp1,1个comp2,2个comp3
prod3需要:2个comp1,2个comp2,2个comp3
在词典中:
rprod = {0: [2,1,1], 1: [3,1,2], 2: [2,2,2]}
我需要获得此预期输出:
lst= [
[1, 1, 1, 1, 1, 1, 1, -2, -2, -3],
[1, 1, 1, -1, -1, -1],
[1, 1, 1, 1, -1, -1, -2]
]
输出背后的逻辑:
主列表具有3个子列表,因为有3个组成部分。这个想法是,每个子列表代表一种类型的组件的输入和消耗
输入:子列表的第一个元素对应于所生成组件的单位。与组件需求相对应的次数必须记为“ 1”。 示例:让我们看一下comp1的列表(第一个子列表),因为我们知道Comp1的需求为7,所以该子列表应按以下顺序开始:
输入= [1、1、1、1、1、1、1]
消费:现在我们需要将产品需求合并到子列表中,但是这些需求不是贡献(+),而是消耗(-)。产品的需求是:
prod1 = 2 prod2 = 1 prod3 = 0
我们还知道某种产品会消耗:
rprod = {0: [2,1,1], 1: [3,1,2], 2: [2,2,2]}
key 0 = prod 1
key 1 = prod 2
key 2 = prod 3
示例:该产品的comp1的消费清单为:
Consumption = [-2, -2, -3]
等于[rprod[0][0], rprod[1][0], rprod[2][0]]
因此,最终comp1的子列表将是Input + Consuption:
[1, 1, 1, 1, 1, 1, 1, -2, -2, -3]
有什么建议可以列出吗?
答案 0 :(得分:0)
我认为还可以。有点混乱,但是希望您能想到这个主意
rprod = {0: [2,1,1], 1: [3,1,2], 2: [2,2,2]}
comp = [7, 3, 4]
flat_comp = [[1]*x for x in comp] # [[1, 1, 1, 1, 1, 1, 1], [1, 1, 1], [1, 1, 1, 1]]
# turn prod into a list of rprod indices
prod = [2, 1, 0]
flat_prod = [i for i, x in enumerate(prod) for _ in range(x)] # [0, 0, 1]
result = [[] for _ in range(len(comp))]
for i in range(len(comp)):
result[i] = flat_comp[i]
for production in flat_prod:
result[i].append(-rprod[production][i])
print(result) # [[1, 1, 1, 1, 1, 1, 1, -2, -2, -3], [1, 1, 1, -1, -1, -1], [1, 1, 1, 1, -1, -1, -2]]