TIM Labs

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

| コメント(0) | トラックバック(0)
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倍以上高速になったようだ。
内包にすることで、短くなり、速度も上がるようなので、内包が使える場合にはどんどん使った方が良さそうだ。

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

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/542

コメントする

このブログ記事について

このページは、fujiが2016年12月21日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「NumPy簡単実験:配列のときの数値の記憶のされ方」です。

次のブログ記事は「Python簡単実験:集合も内包の方が速い」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。