我有两个清单:
list_1 = [0, 1, 0, 0, 0, 0, 1]
list_2 = [34, 54, 23, 54, 656 34, 100]
我想仅对list_2
中list_2
中list_1
中的索引与54 + 100 = 154
中相同索引的值1匹配的值求和。
此处的示例为AMA.Manager
如何以Pythonic方式在Python中执行此操作?
答案 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
>>>