使用生成器进行计数的最佳做法是什么

What is best practice to use generators for counting purposes

假设我有一个这样的列表:

my_list = range(10)

我想数一数列表中有多少个偶数。请注意,我对这些值不感兴趣,我只想要它们的数量。所以我可以:

len( [0 for i in my_list if i % 2 == 0] ) # Method 1
len( [i for i in my_list if i % 2 == 0] ) # Method 2
len( [_ for i in my_list if i % 2 == 0] ) # Method 3

从速度或内存的角度来看,上述任何方法是否比其他方法更好?

其实我什至不需要构建列表,但我不想:

counter = 0
for item in my_list:
   if item % 2 == 0:
      counter += 1

那么,哪一个是用生成器计数的好方法?

PS:在我的例子中,列表有更多的内存密集型项目,这就是为什么我想尽可能优化的原因。

使用上面的none。使用 sum() 和生成器表达式:

sum(i % 2 == 0 for i in mylist)

在Python中,bool布尔类型是int的子类,True的整数值为1False0,因此您可以对一系列 TrueFalse 结果求和。

sum()-with-generator 表达式一次只需在内存中保留一个布尔值,无需生成和保留中间列表来计算长度。

或者,坚持过滤并对 1 个文字求和:

sum(1 for i in mylist if i % 2 == 0)

这导致需要添加的对象更少。