【问题标题】:Sum elements of list using condition on indexes使用索引条件对列表元素求和
【发布时间】:2014-10-26 23:06:05
【问题描述】:

我有一个长度列表L,带有一些随机值:

list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]

和另一个相同长度的列表,带有布尔值

list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]

我想将list1 的值相加,其中对应的元素 list21。 (本例中为 6+8+3)

有没有简单的方法在 Python 中实现?

【问题讨论】:

标签: python list sum element conditional-statements


【解决方案1】:

您可以将itertools.compresssum 一起使用:

>>> import itertools
>>> list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
>>> list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
>>> list(itertools.compress(list1, list2))
[6, 8, 3]
>>> sum(itertools.compress(list1, list2))
17

【讨论】:

    【解决方案2】:

    是的,使用sumitertools.compress

    >>> from itertools import compress
    >>> sum(compress(list1, list2))
    17
    

    解释: compress() 接受两个迭代,如果第二个的对应元素为真,则从第一个产生元素。 sum() ...嗯,你大概猜到了。

    【讨论】:

      【解决方案3】:

      您还可以使用zip 进行条件理解:

      >>> list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
      >>> list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
      
      >>> sum(item for item, flag in zip(list1, list2) if flag)  
      17
      

      if flag 检查对应的项目是否不为零。如果你想明确检查1

      >>> sum(item for item, flag in zip(list1, list2) if flag == 1)  
      17
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-29
        • 2017-08-11
        • 1970-01-01
        • 2018-09-17
        • 2021-01-21
        • 1970-01-01
        • 2011-09-22
        相关资源
        最近更新 更多