読者です 読者をやめる 読者になる 読者になる

GWの自由研究(Python)

プログラミング初心者のゴールデンウィーク自由研究です。

どっちが速い?

ジャパリパークを構成する要素がフレンズであるか否かを判定するコード。

前者internal.pyはin演算子の後ろにlistを直接書いたもので,

後者external.pyはlistが代入された変数を書いたもの。

internal.py

external.py

  • internal.pyの場合ループごとにフレンズのlistを作ってしまうのではないか?

  • だとするとexternal.pyの方が速いのでは?

  • でもそこらへんはインタープリタが勝手に最適化してくれるのかな?

という漠然とした疑問があったものの,Pythonそのものの実装を紐解いて演繹的に考える知識は無いのでちょっとした実験をしてみた。

ちゃんとした実験になっている保証はない。

おバカな実験

これが実験用のコード。

exp_internal.py

exp_external.py

当初のループの外側にfor i in range(50000)を書いて同じことを50000回やらせてみた。

塵も積もれば山となる方式。

もし塵が存在するのであれば,だが。

実行環境は下記の通り。

マシン:MacBook Pro (Retina 13-inch、Early 2015)

CPU:2.7 GHz Intel Core i5

メモリ:8 GB 1867 MHz DDR3

Python:3.5.1 (default, Jan 2 2016, 18:07:30) [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin

結果

exp_internal exp_external
1 9.799 sec 9.652 sec
2 9.817 sec 9.883 sec
3 9.774 sec 9.718 sec
4 9.844 sec 9.856 sec
5 9.823 sec 9.747 sec
6 9.935 sec 9.825 sec
7 9.701 sec 9.794 sec
8 9.782 sec 9.705 sec
9 9.871 sec 9.940 sec
10 9.709 sec 9.777 sec
average 9.8055 sec 9.7897 sec

塵はなかった。(たぶん…。)

結論

評価対象のlist(今回の場合だとfriends)に変更が発生しなく,かつ,

素数が少ない場合はinternal.pyのような書き方もアリなのかも。