我试图找到最快的方法来计算列表中与特定过滤器匹配的项目数。在这种情况下,查找列表中有多少个奇数。
在执行此操作时,比较列表推导式与等效生成器表达式的结果让我感到惊讶:
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
我也尝试过将 L 作为常规列表,并且大小不同,但在所有情况下,列表理解都会获胜。
与创建包含 100 万个项目的新列表的 listcomp 相比, genexp 做了什么导致它变慢......?
(顺便说一句,我发现最快的方法是:x = 1; len(filter(x.__and__, L))
。是的,我知道编写这样的代码会杀死小猫,我这样做是为了好玩)