※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

Python簡単実験:内包で何倍高速になるか


2016年 12月 21日

100以下の偶数の自然数からなる集合 を考えよう。
Pythonではなく、数学的にはどう表現するであろうか。

{2,4,6,8,...100}
これでも良いのだが、ちょっと…という部分が気になる。これを、内包表記に書き換えると、
{ x | x は自然数で偶数かつx≦100 }
と表記できる。 | の左側に 元を書き、| の右側に条件を書く。

上記は数学での内包の説明である。
内包の英語は comprehension で、本来「理解」という意味なのだが、数学用語としては「内包」というのがある。

Pythonの場合、集合だけではなく、リスト、辞書にも使える。
次のコードは、1から1000万までの数をリストに順番に入れる。
a = []
for i in range(1,10000001):
a.append(i)
これの実行時間を以下のようにして計測した。
>>> import time
>>> a = []
>>> t0 = time.time()
>>> for i in range(1,10000001):
...     a.append(i)
...
>>> time.time() - t0
2.0536093711853027
約2秒かかっている。

次に、同じリストを内包を使って作ってみた。
>>> a = []
>>> t0 = time.time()
>>> a = [i for i in range(1,10000001)]
>>> time.time() - t0
0.3618910312652588
最初の a = [] は、前の測定と同じ条件にするために入れた。

結果は、内包を使うことで、2.05秒が0.36秒になり、5倍以上高速になったようだ。
内包にすることで、短くなり、速度も上がるようなので、内包が使える場合にはどんどん使った方が良さそうだ。

ということで、もっと内包についてネチネチ調べていこう。