【发布时间】:2016-11-26 21:13:50
【问题描述】:
我有两个列表:
list_1 = [0, 1, 0, 0, 0, 0, 1]
list_2 = [34, 54, 23, 54, 656 34, 100]
我只想对list_2 中的值求和,其中list_2 中的索引与list_1 中相同索引的值1 匹配。
这里的例子是54 + 100 = 154
如何以 Python 风格的方式在 Python 中执行此操作?
【问题讨论】:
我有两个列表:
list_1 = [0, 1, 0, 0, 0, 0, 1]
list_2 = [34, 54, 23, 54, 656 34, 100]
我只想对list_2 中的值求和,其中list_2 中的索引与list_1 中相同索引的值1 匹配。
这里的例子是54 + 100 = 154
如何以 Python 风格的方式在 Python 中执行此操作?
【问题讨论】:
只需使用itertools 中的compress 并将其提供给sum;它是为此目的而构建的:
from itertools import compress
r = sum(compress(list_2, list_1))
【讨论】:
压缩列表,然后仅对第一个元素为 1 的值求和:
s = sum(b for a, b in zip(list_1, list_2) if a)
另一种 zip 方法是列表之间的元素乘法(从而消除并行为 0 的元素):
s = sum(a * b for a, b in zip(list_1, list_2))
【讨论】:
可能不太像 Python,但也适用于类似大小的列表:
>>> 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
>>>
【讨论】: