Windows で Python 3.3.1 64 ビットを使用しており、次のコード スニペットを使用しています。
len ([None for n in range (1, 1000000) if n%3 == 1])
これと比較して、136ミリ秒で実行されます。
sum (1 for n in range (1, 1000000) if n%3 == 1)
これは 146 ミリ秒で実行されます。この場合、ジェネレーター式はリスト内包表記よりも高速または同じ速度であるべきではありませんか?
Guido van Rossum From List Comprehensions to Generator Expressions から引用します。
... Python 3 のリスト内包表記とジェネレーター式の両方が、実際には Python 2 よりも高速です! (そして、2 つの間に速度の違いはなくなりました。)
編集:
で時間を計測しましたtimeit
。あまり正確ではないことはわかっていますが、ここでは相対速度のみを気にし、さまざまな反復回数でテストすると、リスト内包バージョンの時間が一貫して短くなります。