[[小手先]]

小手先

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

programming/python/tips/superficial.txt · 最終更新: 2018/03/06 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0