【问题标题】:Weighted average of all values given 2d lists and library of values给定二维列表和值库的所有值的加权平均值
【发布时间】:2018-10-29 16:24:51
【问题描述】:

我有三个不同的列表:

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]

我正在尝试查找 a 的给定条目中所有值的总和的权重和容量,例如在 a[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 和 capacity_a 是 a 的每个列表中条目的 weighted_average 和容量之和。

值 7 的重量为 25,容量为 700:

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

weight_a 等式是 sum (weight of value * capacity of value) / 所有值的容量之和

容量_一个方程是所有值的容量之和

我一直在试图阐明问题,但似乎无法弄清楚。我正在尝试压缩(值、容量、重量),但我不确定如何在给定 2d 列表 a 的情况下访问它。

感谢任何帮助!

【问题讨论】:

  • 你能解释一下a[0]的重量和容量的计算吗?你从哪里得到700 * 25 from?
  • 因为 a[0] = [7,5,8] a[0] 的第一个条目是 7,所以列表“容量”中 7 的容量为 700,而 7 的权重来自列表“权重”为 25。所有内容都按上面更详细的说明求和

标签: python python-3.x list loops


【解决方案1】:

您可以将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)

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2019-01-28
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多