使用索引上的条件对列表的元素求和

时间:2014-09-02 15:53:24

标签: python list sum element conditional-statements

我有一个长度为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中实现吗?

3 个答案:

答案 0 :(得分:4)

您可以itertools.compress使用sum

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

答案 1 :(得分:2)

是的,使用sumitertools.compress

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

说明: compress()需要两次迭代,如果第二个的相应元素是真实的,则从第一个产生元素。 sum() ......好吧,你可以猜到。

答案 2 :(得分:0)

您还可以使用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