仅当单独的布尔列表中的元素为True时,才会对python列表中的元素求和

n3u*_*ino 2 python comparison boolean list-comprehension

我有两个python列表,

A = [ 1, 2, 3, 4, 5 ]
B = [ True, False, False, True, True ]
Run Code Online (Sandbox Code Playgroud)

列表A和B的长度相同.

我想只总结A中与B中的True元素相对应的元素.我知道我可以用以下方法做到:

sum([A[x] for x in xrange(len(A)) if B[x]])
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个更优雅的解决方案,不涉及循环每个列表中的元素?

vau*_*tah 6

使用itertools.compress:

>>> from itertools import compress
>>> sum(compress(A, B))
10
Run Code Online (Sandbox Code Playgroud)

itertools.compress链接页面上描述了实现.这是短期和简单,所以你不要进口itertools 1:

>>> sum(a for a, b in zip(A, B) if b)
10
Run Code Online (Sandbox Code Playgroud)

1 OTOH,itertools.compress用C实现,因此应该更快