【发布时间】:2015-12-12 04:30:34
【问题描述】:
假设我有一个类似的列表:
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:在我的例子中,列表有更多的内存项,这就是我想尽可能优化的原因。
【问题讨论】:
-
推荐:学习如何使用
timeit并自己衡量这些结果。如果你使用 IPython 和它的内置%timeit魔法会更容易...... -
@CorleyBrigman 感谢您的推荐。我使用并喜欢 %timeit。但是,这里的问题主要是调查内存效率。我正在寻找另一种在不生成列表本身的情况下计算项目的方法。
-
确实如此。另外,也许相关:stackoverflow.com/questions/393053/length-of-generator-output ...顺便说一句,既然你提到了生成器,那么你正在使用 python 3?
-
@CorleyBrigman 不。 Python 2.7 4eva。