一般的にリスト内包表記 [x*2 for x in items] の方が同等の for ループより高速です。CPython の実装上、内包表記は専用バイトコードで最適化されており、ループ変数のスコープ管理も不要なためオーバーヘッドが小さくなります。
== と is の使い分けを教えてください。
== は値(内容)の等価性を比較し、is はオブジェクトの同一性(メモリアドレス)を比較します。None との比較には慣用的に x is None を使います。整数の -5〜256 はCPythonでキャッシュされるため is が True になりますが、これは実装依存であり is で値を比較するのは避けてください。