Автоматизация списка Python - PullRequest
0 голосов
/ 24 июня 2018

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

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

prod2 нужно: 3 комп1, 1 комп2, 2 комп3

prod3 нужно: 2 комп1, 2 комп2, 2 комп3

В словаре:

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]   
        ]

Логика за выводом:

  1. В основном списке есть 3 подсписка, потому что есть 3 компонента. Идея состоит в том, что каждый подсписок представляет входные данные и потребление для типа компонента

  2. Ввод : первые элементы подсписка соответствуют единицам произведенных компонентов. Количество раз, соответствующее требованию компонента, должно быть записано «1». Пример : Давайте посмотрим список для comp1 (первый подсписок), мы знаем, что требование Comp1 равно 7, поэтому подсписок должен начинаться следующим образом:

    Ввод = [1, 1, 1, 1, 1, 1, 1]

  3. Потребление : Теперь нам нужно включить требования к продукту в подсписок, но они вместо добавления (+), потребления (-). Требования к продукции:

    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]

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

1 Ответ

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

я думаю, что все в порядке.это немного грязно, но, надеюсь, вы поймете идею

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