我有两个 python 列表,
A = [ 1, 2, 3, 4, 5 ]
B = [ True, False, False, True, True ]
列表 A 和 B 的长度相同。
我只想对 A 中对应于 B 中 True 元素的元素求和。 我知道我可以用类似的东西来做到这一点:
sum([A[x] for x in xrange(len(A)) if B[x]])
但我想知道是否有更优雅的解决方案,不涉及循环每个列表中的元素?
最佳答案
使用 itertools.compress
:
>>> from itertools import compress
>>> sum(compress(A, B))
10
itertools.compress
的实现在链接页面上有描述。它简短而简单,因此您不必导入 itertools
1:
>>> sum(a for a, b in zip(A, B) if b)
10
1 OTOH,itertools.compress
是用 C 实现的,因此应该更快
关于python - 仅当单独的 boolean 列表中的元素为真时,才对 python 列表中的元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504738/