【问题标题】:Summing values in a list where the other list index is a 1? [duplicate]对另一个列表索引为 1 的列表中的值求和? [复制]
【发布时间】:2016-11-26 21:13:50
【问题描述】:

我有两个列表:

list_1 = [0, 1, 0, 0, 0, 0, 1]
list_2 = [34, 54, 23, 54, 656 34, 100]

我只想对list_2 中的值求和,其中list_2 中的索引与list_1 中相同索引的值1 匹配。

这里的例子是54 + 100 = 154

如何以 Python 风格的方式在 Python 中执行此操作?

【问题讨论】:

标签: python list lambda


【解决方案1】:

只需使用itertools 中的compress 并将其提供给sum;它是为此目的而构建的:

from itertools import compress 
r = sum(compress(list_2, list_1))

【讨论】:

    【解决方案2】:

    压缩列表,然后仅对第一个元素为 1 的值求和:

    s = sum(b for a, b in zip(list_1, list_2) if a)
    

    另一种 zip 方法是列表之间的元素乘法(从而消除并行为 0 的元素):

    s = sum(a * b for a, b in zip(list_1, list_2))
    

    【讨论】:

      【解决方案3】:

      可能不太像 Python,但也适用于类似大小的列表:

      >>> l1 = [0,1,0,0,1]
      >>> l2 = [10,23,45,1,23]
      >>> map(lambda x,y: x*y , l1,l2)
      [0, 23, 0, 0, 23]
      >>> sum(map(lambda x,y: x*y , l1,l2))
      46
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2019-08-10
        • 2018-07-15
        • 2020-11-11
        • 2014-12-21
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        • 2014-02-12
        相关资源
        最近更新 更多