下面的问题可能有点混乱,但我会尽量用最好的方式来解释。
假设我们在一家制造公司工作它生产零部件,然后用于制造产品在下面的示例中,有3个组件和2个最终产品。
组件和产品的需求如下:

comp1 = 8
comp2 = 3
comp3 = 5
prod1 = 2
prod2 = 2

可以保存在字典中:
clst = {"comp": [comp1, comp2, comp3], "prod": [prod1, prod2]}

另一方面,为了制造最终产品,部件要求如下:
产品需求:2个组件1,1个组件2,1个组件3
产品2需要:3个组件1、1个组件2、2个组件3
在字典里:
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的数量对应于组件的需求量,负数的最后一个数字是产品组件的需求量。
有什么建议吗?

最佳答案

下面是代码的可读格式:

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

关于python - Python自动化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50808650/

10-10 06:30