search
LoginSignup
5

More than 1 year has passed since last update.

posted at

updated at

pythonの標準入力受け取りinput()とsys.stdinはどっちがいいの?

なんとなくinput()を避けてsys.stdinを使ってきたけど実際どっちがいいのか?を速度とコード量的に比較してみました。追加でfileinputも比較します。

結論 sys.stdinを使え

動作速度は
input() <<< fileinput < sys.stdin

 

比較方法

  • オンライン実行環境のpaiza.io を使用(特に意味は無し)。
  • 1 2 3 4の様な数字+空白のフォーマットを1万行、標準入力として渡す。
  • timeを使って、標準入力をintに変換しlistに格納するまでの時間を計測。

input()の動作速度

input()のコード例.py
data_all = [input().split() for i in range(10000)]#データ一括取得
data_list = [[int(s) for s in line]for line in data_all] #データのint化
#for line in data_all:
#    data_list.append([int(s) for s in line])

動作時間: 約21.1[msec]

sys.stdinの動作速度

sysのコード例.py
data_list = [ [int(s) for s in line.split()] for line in sys.stdin ]
#data_list = []
#for line in sys.stdin:
#    data_list.append([int(s) for s in line.split()])

動作時間: 約10.5[msec]

fileinputの動作速度

import fileinput
data_list = [ [int(s) for s in line.split()] for line in fileinput.input() ]

動作時間: 約12.5[msec]

sysの方がコードもスッキリ

内包表記に変えました。input()使うとどうしても2行になっちゃうかな...
動作速度はinput()の方が倍近く遅いですね。他の方の記事を見ていると、10倍以上差が出たりする様です。sysを使った方が色々と良さそうですね。
追加で試したfileinputですが、sys.stdinほど速くもないかなぐらいでした。

int変換なしの場合

input()の場合、約12.9[msec]
sys.stdinの場合、約5.5[msec]
fileinputの場合、約7.5[msec]
int変換って意外と時間かかりますね。動作速度はやっぱりsys.stdinが速そうです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5