python - 仅当单独的 boolean 列表中的元素为真时,才对 python 列表中的元素求和

标签 python boolean comparison list-comprehension

我有两个 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/

相关文章:

python - 如何仅从一个文件中打印出具有间隔的记录,而不是与另一个文件中的记录重叠

python - 这段代码有Python函数吗?

python - 如何将列表中的数据放入many2many

c++ - 使用 std::sort 对包含两个数据成员的对象 vector 进行排序

python - 内置的 object() 什么时候有用?

java - 标记平方数的代码不起作用,这是为什么?

ios - 更改 nsdictionary 中的 bool 值时的 EXC_BAD_ACCESS

sql - 在 SQL 查询中将 int 或 null 转换为 boolean 值的最佳方法是什么?

java比较两个枚举

excel - Excel 的工作表比较运算符是否给出不一致的结果?