かんプリンの学習記録

勉強したことについてメモしています. 主に競技プログラミングの問題の解説やってます.

Pythonモジュールまとめ

競プロ使うPythonのモジュールの使い方をメモしていきます.

Counter(頻度分布)

リストや文字列を与えると要素ごとの出現頻度がわかる(辞書型みたいな感じ{要素:頻度}).
{O(N)}

from collections import Counter

a = [3,1,4,1,5,9,2,6,5,3,5,8,9,7,9]
c = Counter(a)
print(c.most_common()) # [(5, 3), (9, 3), (3, 2), (1, 2), (4, 1), (2, 1), (6, 1), (8, 1), (7, 1)]
print(c[3]) # 2

練習問題

permutations(順列列挙)

リストや文字列(ソートされている必要はない)を与えるとそのリストの順列をすべて列挙する. ただし, 同じ要素が複数ある場合は同じ順列が複数出現する.
{O(N!)}

from itertools import permutations

a = [1,2,3,4]
for x in permutations(a):
    print(x) # (1,2,3,4)や(2,4,1,3)など

練習問題

combinations(組合せ列挙)

リストや文字列(ソートされている必要はない)を与えるとそのリストの組合せをすべて列挙する. ただし, 同じ要素が複数ある場合は同じ組合せが複数出現することがある.
{O(N!)}

from itertools import combinations

a = [1,2,3,4]
for x in combinations(a,2):
    print(x) # (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)

練習問題

deque

前後への挿入や削除が{O(1)}でできるリストみたいなもの.
{O(1)}

from collections import deque

deq = deque([1,4]) # 引数なくてもいい
print(deq) # [1, 4]

deq.append(1)
print(deq) # [1, 4, 1]

deq.appendleft(3)
print(deq) # [3, 1, 4, 1]

print(deq.pop()) # 1
print(deq) # [3, 1, 4]

print(deq.popleft()) # 3
print(deq) # [1, 4]

defaultdict(デフォルト辞書)

keyエラーにならない辞書
{O(1)}

from collections import defaultdict

d = defaultdict(int)
for i in range(10):
    d[i] += 1

練習問題