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