LoginSignup
3
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-24

なんとなく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が速そうです。

3
5
1

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
  3. You can use dark theme
What you can do with signing up
3
5