トモロログ

仕事や趣味でのメモや記録など

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