特定のフィルターに一致するリスト内のアイテムの数を数える最も簡単な方法を見つけようとしていました。この場合、リストに奇数がいくつあるかを見つけます。
これを行っている間、リスト内包表記と同等のジェネレータ式を比較した結果に驚きました。
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))
です。そして、はい、私は子猫を殺すようなコードを書くことを知っています、私はそれを楽しむためにそれをやっています)