小手先
python3でプログラミングコンテストするときの速度アップのための小手先テクニック
入出力
何行にもわたる入力はsys.stdin.readlines
通常はinput()で1行ずつ取得できる。記述量が少なく便利だが、わずかにsys.stdin.readlines()をイテレートした方が速い。入力行数が10万行を超え出すと顕著に差は出てくる。
何行にもわたる出力はjoin
求められる出力行数が多くなるときは、入力毎にprint()するより、答えをリストにキャッシュして、最後に一括でprint()した方が速い。行数にもよるが、数倍変わってくる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# こいつを1要素1行, 10万行にわたり出力する out = list ( range ( 100000 )) # 普通にforで回す def foreach(): for n in out: print (n) # キャッシュして、joinで改行を挟んで結合 def join(): cache = [] for n in out: cache.append(n) print ( '\n' .join( map ( str , cache))) # print()関数のsepパラメータを指定 def sep(): print ( * out, sep = '\n' ) from timeit import timeit t = timeit( 'foreach()' , number = 10 , globals = globals ()) print (t) # => 3.43728 t = timeit( 'join()' , number = 10 , globals = globals ()) print (t) # => 0.76354 t = timeit( 'sep()' , number = 10 , globals = globals ()) print (t) # => 3.32895 |