我试图找到一种最快的方法来计算符合特定过滤器条件的列表中的项目数量。在这种情况下,我要找出列表中有多少个奇数。
在执行此操作时,我对比较列表推导式和等效生成器表达式的结果感到惊讶:
python -m timeit -s "L = xrange(1000000)" "sum([1 for i in L if i & 1])"
10 loops, best of 3: 109 msec per loop
python -m timeit -s "L = xrange(1000000)" "sum(1 for i in L if i & 1)"
10 loops, best of 3: 125 msec per loop
我还尝试了使用普通列表和不同大小的列表,但在所有情况下,列表推导式都胜出。
那么,genexp是做了什么导致它比创建一个包含100万个项目的列表的listcomp慢呢?
(顺便说一句,我找到的最快方法是:x = 1; len(filter(x.__and__, L))
。是的,我知道写这样的代码会杀死小猫咪,我只是为了好玩而已)