PythonのStringで空文字をif文で判定したい場合のパフォーマンス調査
今回はPythonのStringで空文字を判定したい場合のパフォーマンス調査をしていきます。
PythonでStringを空文字で判定したい場合に
if a == '':
と
if len(a) == 0:
の二種類あるかと思いますが、その二種類についてパフォーマスを比べてみました。
忙しい方のために最初に結論を書いてしまうと、
if a == '':
の方が
if len(a) == 0:
よりも二倍くらい早いです。
動作環境はPython3です。(Python3.7)
PythonのStringで空文字をif文で判定したい場合のパフォーマンス調査
やり方としては、簡単に実装できるtimeモジュールを使った方法を採用します。
まずは
if a == '':
についてみていきます。
作成したコードは次の通りです。
1 2 3 4 5 6 7 8 |
import time start = time.time() a = '' if a == '': pass process_time = time.time() - start print(process_time) |
余計な処理を与えないために条件分岐の後はpassで何も処理せず飛ばしています。
3回ほど実行した結果はこちらです。
1 2 3 |
9.5367431640625e-07 Process finished with exit code 0 |
1 2 3 |
1.0967254638671875e-05 Process finished with exit code 0 |
1 2 3 |
1.9073486328125e-06 Process finished with exit code 0 |
早すぎて処理時間がまばらですね。
桁数がバラバラなことに注目すると、全体の処理が早すぎて計測した結果が安定しないことが分かると思います。
念のため、
if len(a) == 0:
の場合も同じようなコードで3回計測してみます。
コードはこちらです。
こちらの方がコードの書き方がおしゃれですね。
1 2 3 4 5 6 7 8 |
import time start = time.time() a = '' if len(a) == 0: pass process_time = time.time() - start print(process_time) |
3回計測した結果は次の通りです。
1 2 3 |
2.1457672119140625e-06 Process finished with exit code 0 |
1 2 3 |
3.0994415283203125e-06 Process finished with exit code 0 |
1 2 3 |
3.0994415283203125e-06 Process finished with exit code 0 |
if a == '':
の場合とほぼ同じような速度ですね。
for文で1億回まわしてみる
1回条件分岐をしたのみでは早すぎて比較できないという結果だったので、for文で1億回まわしてみることにしました。
if a == '':
で1億回まわすコードはこちらです。
1 2 3 4 5 6 7 8 |
import time start = time.time() a = '' for i in range(100000000): if a == '': pass process_time = time.time() - start print(process_time) |
このコードを3回実行した結果はこちらです。
1 2 3 |
6.154670000076294 Process finished with exit code 0 |
1 2 3 |
6.297642946243286 Process finished with exit code 0 |
1 2 3 |
6.290048122406006 Process finished with exit code 0 |
if a == '':
の場合では
大体6秒ちょっとかかるという結果になりました。
続いて、PythonでStringの判定に
if len(a) == 0:
を使った場合です。
同じようにfor文で1億回まわします。
1 2 3 4 5 6 7 8 |
import time start = time.time() a = '' for i in range(100000000): if len(a) == 0: pass process_time = time.time() - start print(process_time) |
3回実行した結果はこちらです。
1 2 3 |
13.751023054122925 Process finished with exit code 0 |
1 2 3 |
13.936042070388794 Process finished with exit code 0 |
1 2 3 |
14.665934085845947 Process finished with exit code 0 |
if len(a) == 0:
を使う場合は大体14秒前後かかります。
結論:if a == ":の方が約2倍早い
結果としては、
if a == '':
を1億回まわすと6秒近くかかり、
if len(a) == 0:
を1億回まわすと大体14秒前後かかるという結果になりました。
よって、パフォーマンスを重視するならば、ほぼ誤差に近いですが
if len(a) == 0:
よりも
if a == '':
の方が良いです。
if len(a) == 0:
の方がやり方としてかっこいいですけどね。
終わりに
今回はPythonのStringで空文字をif文で判定したい場合について、パフォーマンスを調査した結果を書きました。
PythonやPythonを使ったライブラリやフレームワークのパフォーマンスの調査に興味があり、様々なコーディング方法の違いによる最適化の調査を行っております。
リストにまとめてあるので、よろしければ覗いてみてください。
Pythonとそのライブラリやフレームワークのパフォーマンス調査結果リスト
ディスカッション
コメント一覧
まだ、コメントがありません