syakoo's Lab

技術ブログやちょっと気合の入った記事を残すブログ

配列の出力についての簡単な実験ログ(python)

背景

配列の文字列をくっつけて出力するには以下のようにする方法がある。

>>> S = ["King","Queen","Rook","Bishop","Knight","Pawn"]
>>> print(" ".join(S))
King Queen Rook Bishop Knight Pawn

だが、タプルのアンパッキングを知ってしまったためこのやり方もあることに気付いた

>>> print(*tuple(S))
King Queen Rook Bishop Knight Pawn

joinを使う記述のほうが早そうだし、単語の間に入れる文字を選択できるし、コードも理解しやすいので意味がないかもしれないが、早さの違いを調べたくなった。

実験内容

早さを測定する方法として何となく使ってみたかったpytestを使ってみる。背景に紹介してはいるが今回エントリーした挑戦者はこちらの二方。

joinを使った出力方法
def print_join(S):
    print(" ".join(S))
tupleを使った出力方法
def print_tuple(S):
    print(*tuple(S))

使用した文字列は何となく自分の好きな曲の"What Do I Know? / Ed Sheeran"の歌詞を使った。  

実験結果

1曲の歌詞くらいの長さではほとんど影響がない

================================ slowest test durations ================================
0.00s call     test_test.py::test_print_tuple
0.00s call     test_test.py::test_print_join
0.00s setup    test_test.py::test_print_join
0.00s setup    test_test.py::test_print_tuple
0.00s teardown test_test.py::test_print_tuple
0.00s teardown test_test.py::test_print_join
=============================== 2 passed in 0.03 seconds ===============================

下の時間を見ると全部0.00sとなっている。けどtest_print_tupleが一番上に来ているからtupleの方が遅いことがわかる。とはいえどれくらい遅いのかわからないから、両方とも100ループして結果を見てみる。

================================ slowest test durations ================================
0.44s call     test_test.py::test_print_tuple
0.00s call     test_test.py::test_print_join
0.00s setup    test_test.py::test_print_join
0.00s teardown test_test.py::test_print_join
0.00s setup    test_test.py::test_print_tuple
0.00s teardown test_test.py::test_print_tuple
=============================== 2 passed in 0.47 seconds ===============================

正体を現しましたね。やはりこれからもjoinを使って配列の連結をしたいと思った。むしろjoinってこんなに早いのか...