我有一个长度为L
的列表,其中包含一些随机值:
list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
和另一个长度相同的列表,布尔值为
list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
我想将list1
的值相加到其中的相应元素
list2
是1
。 (在这种情况下为6 + 8 + 3)
有一种简单的方法可以在Python中实现吗?
答案 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)
是的,使用sum
和itertools.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