9章「データ型とアルゴリズム」の対策ポイントと例題
9章「データ型とアルゴリズム」からは本番40問中5問が出ます。collections・itertools・functools といった標準ライブラリの道具箱を問う、2番目に出題数の多い章です。
- collections
- itertools
- functools
- heapq
- bisect
- enum
- copy
この章の出題数と位置づけ
9章「データ型とアルゴリズム」からは本番40問のうち5問が出題されます。 全体に占める割合は12.5%で、15章中2番目の出題数です。 合格に必要なのは28問正解(12問まで不正解可)なので、 この章の5問をどこまで取りに行くかは、他の章との兼ね合いで決めるのが現実的です。
対策のポイント
- defaultdict・Counter・deque・namedtuple はそれぞれ何を解決する道具かを、用途で覚えます。
- Counter の most_common、deque の maxlen と rotate、appendleft は出題されやすい具体点です。
- itertools の chain / product / permutations / combinations / groupby は、戻り値がイテレータであることが重要です。
- functools.lru_cache によるメモ化、partial による引数の部分適用、reduce の畳み込みを押さえます。
- copy.copy(浅いコピー)と copy.deepcopy(深いコピー)の違いは、入れ子リストの例で問われます。
この章の例題(3問)
当サイトで実際に出題している問題から3問を、正解と解説つきで掲載します。 すべて自作のオリジナル問題で、実際の試験問題ではありません。
例題1. 実行結果として正しいものを選べ。
from collections import Counter
print(Counter("aabbbc").most_common(1))
- 正解[('b', 3)]
- ('b', 3)
- {'b': 3}
- [('a', 2)]
解説: most_common(n) は件数を問わず必ずリストを返す。要素はタプルなので、1件でもリストで包まれる点に注意。
例題2. 実行結果として正しいものを選べ。
from collections import defaultdict
d = defaultdict(int)
d["x"] += 1
print(d["y"])
- 正解0
- KeyError
- None
- 1
解説: defaultdict は存在しないキーにアクセスした時点でファクトリを呼び、int() すなわち 0 を作って格納する。参照しただけでキーが増える副作用があるのが特徴。
例題3. 実行結果として正しいものを選べ。
import itertools
print(list(itertools.combinations([1, 2, 3], 2)))
- 正解[(1, 2), (1, 3), (2, 3)]
- [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
- [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]
- [(1, 2), (2, 3)]
解説: combinations は順序を区別しない組み合わせ。順序を区別するのは permutations(選択肢2)、同じ要素の重複を許すのは combinations_with_replacement(選択肢3)。
この章は当サイトに全12問を収録しています。残りはドリルの「章別に解く」から解けます。