Python中高效统计对象列表布尔属性真值数量的优化方案问询
高效统计Python对象列表中布尔属性为True的数量
我有一个包含布尔属性的Python对象列表,需要以相对高效的方式统计其中属性为True的数量。测试脚本如下:
import random import timeit class testClass: def __init__(self, boolean): self.bool = bool(boolean) bools = [random.randint(0,1) for i in range(1000)] class_instances = [testClass(boolean=bool) for bool in bools]
现在得到了一个包含1000个testClass实例的列表,每个实例的bool属性都是布尔值。
我已经了解几种常规实现方式:
sum([instance.bool for instance in class_instances]):通过列表推导式生成布尔值列表后求和sum(instance.bool for instance in class_instances):用生成器表达式求和,但速度更慢
但这个求和操作会频繁执行,性能分析显示,创建列表或生成器的过程会耗费不少时间。提前生成bool_list = [instance.bool for instance in class_instances]再执行sum(bool_list)速度更快,但如果原class_instances中对象的bool属性被修改,bool_list无法同步更新。
我有没有遗漏的优化思路?我认可列表推导式的便捷性,但希望能有类似指针数组的实现,既能保证求和效率,又能在属性修改时自动同步。我猜测最优方案可能是重构类结构,改成包含列表属性的"大"类,而非用单个实例组成的列表。
内容的提问来源于stack exchange,提问作者condimentman
相关产品推荐
相关产品推荐

