ABC [asarenメモ] 小ネタ集
1. dictionaryの存在チェックと値追加
pythonのディクショナリにて存在しないキーにアクセスするとエラーになるので、通常は
代入する前にキーの存在をチェックする必要がある。
しかし、キーの存在チェックをせずにデフォルト値を決めてアクセスする方法。
# kの値の存在チェックとインクリメント
d = {}
k = 123
d[k] = d.get(k,0) + 1
もしくは
from collections import defaultdict d = defaultdict(int) # デフォルトで0がはいる # d = defalutdict(lambda: 100) 特定の値を指定(ここでは100)する場合 d[k] += 1
2.素因数分解
入力nの素因数分解の結果をディクショナリで返す。ABC169 問題Dの時に作成。
ただしこの問題の時は指数だけがわかればよかったのだが。。
いつか使うかもしれないのでメモとして残しておく。
def factrization(n):
p = 2
factor = {}
while p * p <= n:
if n % p == 0:
cnt = 0
while True:
if n % p == 0:
cnt += 1
n = n // p
else:
break
factor[p] = cnt
p += 1
if n > 1:
factor[n] = 1
return factor