以下问题可能有点令人困惑,但我会尽力以最佳方式解释。
我们假设我们为一家制造公司工作。其中制造用于制造产品的组件。在以下示例中,有3个组件和2个最终产品。
组件和产品的需求如下:
comp1 = 8
comp2 = 3
comp3 = 5
prod1 = 2
prod2 = 2
可以保存在字典中:
clst = {"comp": [comp1, comp2, comp3], "prod": [prod1, prod2]}
另一方面,为了制造最终产品,组件要求如下:
prod1需要:2 comp1,1 comp2,1 comp3
prod2需要:3 comp1,1 comp2,2 comp3
在字典中:
rprod = {0: [2,1,1], 1: [3,1,2]}
我需要创建一个列表,其中包含以下列方式混合数据的材料的贡献和消耗列表:
[
[
[1, 1, 1, 1, 1, 1, 1, 1, -2], # ---->comp1/prod1(1)
[1, 1, 1, -1], # ---->comp2/prod1(1)
[1, 1, 1, 1, 1, -1] # ---->comp3/prod1(1)
]
,
[
[1, 1, 1, 1, 1, 1, 1, 1, -2], # ---->comp1/prod1(2)
[1, 1, 1, -1], # ---->comp2/prod1(2)
[1, 1, 1, 1, 1, -1] # ---->comp3/prod1(2)
]
,
[
[1, 1, 1, 1, 1, 1, 1, 1, -3], # ---->comp1/prod2(1)
[1, 1, 1, -1], # ---->comp2/prod2(1)
[1, 1, 1, 1, 1, -2] # ---->comp3/prod3(1)
]
,
[
[1, 1, 1, 1, 1, 1, 1, 1, -3], # ---->comp1/prod2(2)
[1, 1, 1, -1], # ---->comp2/prod2(2)
[1, 1, 1, 1, 1, -2] # ---->comp3/prod3(2)
]
]
列表中的数量1对应于组件的需求数量,负数的最终数量是产品组件的要求。
有关列表的任何建议吗?
答案 0 :(得分:2)
In[2]: comp1 = 8
...: comp2 = 3
...: comp3 = 5
...: prod1 = 2
...: prod2 = 2
...:
...: clst = {"comp": [comp1, comp2, comp3], "prod": [prod1, prod2]}
...: rprod = {0: [2,1,1], 1: [3,1,2]}
In[3]: result = []
...: for i, p in enumerate(clst['prod']):
...: for _ in range(p):
...: tmp = [([1] * a) + [-b] for a, b in zip(clst['comp'], rprod[i])]
...: result.append(tmp)
...:
In[4]: result
Out[4]:
[[[1, 1, 1, 1, 1, 1, 1, 1, -2], [1, 1, 1, -1], [1, 1, 1, 1, 1, -1]],
[[1, 1, 1, 1, 1, 1, 1, 1, -2], [1, 1, 1, -1], [1, 1, 1, 1, 1, -1]],
[[1, 1, 1, 1, 1, 1, 1, 1, -3], [1, 1, 1, -1], [1, 1, 1, 1, 1, -2]],
[[1, 1, 1, 1, 1, 1, 1, 1, -3], [1, 1, 1, -1], [1, 1, 1, 1, 1, -2]]]
答案 1 :(得分:1)
以下是代码的可读格式:
rprod = {0: [2,1,1], 1: [3,1,2]}
clst = {"comp": [8, 3, 5], "prod": [2, 2]}
lst = []
for i, prod_demand in enumerate(clst["prod"]):
sub_list = []
for j, comp_demand in enumerate(clst["comp"]):
sub_list.append([1]*comp_demand+[rprod[i][j]*(-1)])
for k in range(prod_demand):
lst.append(sub_list)
但如果你想浓缩它,你可以写:
rprod = {0: [2,1,1], 1: [3,1,2]}
clst = {"comp": [8, 3, 5], "prod": [2, 2]}
lst = []
for i, p in enumerate(clst["prod"]):
lst += [[[1]*c+[rprod[i][j]*(-1)] for j, c in enumerate(clst["comp"])]]*p