将列表中的值汇总到另一个列表索引是1?

时间:2016-11-26 21:13:51

标签: python list lambda

我有两个清单:

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

我想仅对list_2list_2list_1中的索引与54 + 100 = 154中相同索引的值1匹配的值求和。

此处的示例为AMA.Manager

如何以Pythonic方式在Python中执行此操作?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

压缩列表,然后仅汇总第一个元素为1的值:

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

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

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

答案 2 :(得分:2)

可能不那么pythonic,但也适用于相似大小的列表:

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