Средневзвешенное значение для всех значений с учетом двухмерных списков и библиотеки значений - PullRequest
0 голосов
/ 29 октября 2018

У меня есть три разных списка:

a = [[7,5,8],[3,4]]

value = [9, 5, 7, 8, 3, 4, 10]
weight = [100.0, 65.0, 25.0, 25.0, 100.0, 65.0, 25.0]
capacity = [1000.0, 15.0, 700.0, 700.0, 1000.0, 15.0, 700.0]

Я пытаюсь найти вес и емкость суммы всех значений в данной записи, например, в [0]:

weight_a[0] = (700*25 + 15*65 + 700*25) / (700 + 15 + 700)
capacity_a[0] = 700 + 15 + 700

weight_a[1] = (1000*100 + 15*65) / (1000 + 15)
capacity_a[1] = 1000 + 15

Таким образом, weight_a иacity_a являются суммой weighted_average и емкости записей в каждом списке a.

Значение 7 имеет вес 25 и емкость 700:

7 is value[2] so capacity[2] = 700 and weight[2] = 25

Уравнение weight_a - это сумма (вес значения * емкость значения) / сумма емкости всех значений

уравнение вместимости - это сумма мощностей всех значений

Я застрял, пытаясь сформулировать проблему, и, похоже, не могу ее понять. Я пытаюсь сжать (значения, емкость, вес), но я не уверен, как получить доступ к этому, учитывая 2-й список а.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать map с пользовательской функцией, затем использовать zip для распаковки результатов:

from operator import itemgetter, mul

def calculator(k):
    k_set = set(k)
    getter = itemgetter(*(idx for idx, i in enumerate(value) if i in k_set))
    weights, caps = map(getter, (weight, capacity))
    capsum = sum(caps)
    return sum(map(mul, weights, caps)) / capsum, capsum

weight_a, capacity_a = zip(*map(calculator, a))

print(weight_a, capacity_a)

(25.424028268551236, 99.48275862068965) (1415.0, 1015.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...