100以下の偶数の自然数からなる集合 を考えよう。
Pythonではなく、数学的にはどう表現するであろうか。
上記は数学での内包の説明である。
内包の英語は comprehension で、本来「理解」という意味なのだが、数学用語としては「内包」というのがある。
Pythonの場合、集合だけではなく、リスト、辞書にも使える。
次のコードは、1から1000万までの数をリストに順番に入れる。
次に、同じリストを内包を使って作ってみた。
結果は、内包を使うことで、2.05秒が0.36秒になり、5倍以上高速になったようだ。
内包にすることで、短くなり、速度も上がるようなので、内包が使える場合にはどんどん使った方が良さそうだ。
ということで、もっと内包についてネチネチ調べていこう。
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倍以上高速になったようだ。
内包にすることで、短くなり、速度も上がるようなので、内包が使える場合にはどんどん使った方が良さそうだ。
ということで、もっと内包についてネチネチ調べていこう。
コメントする