Python Автоматизация - PullRequest
       3

Python Автоматизация

0 голосов
/ 12 июня 2018

следующая проблема может немного сбивать с толку, но я постараюсь объяснить ее как можно лучше.

Давайте предположим, что мы работаем на производственную компанию.Который производит компоненты, которые затем используются для производства продуктов.В следующем примере 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 потребность: 3comp1, 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 в списке соответствует количеству потребности в компоненте, конечное число в минусе - требованию компонентов продукта.

Любые предложениясоставить список?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вот читаемый формат кода:

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
0 голосов
/ 12 июня 2018
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]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...