collectionsライブラリーの便利クラス

アルゴリズムとは、何らかの問題を解くときの手順をまとめたものです。

効率的なアルゴリズムを実行するために、特徴的なデータ構造が必要になることがあります。本パートでは、以下のデータ構造を扱います。

スタック
キュー
連結リスト
ヒープ
素集合(UnionFind)

文字列sentenceの、文字ごとの出現数をカウントします。

collections.Counter(リストや文字列など)
リストや文字列などに含まれる要素の種類ごとに、要素数を辞書形式で作成します。
popで要素の削除もできます。
c['e']で辞書のように利用できます。出現数が取得できます。
c.most_common(3)のようにすると、上位3つを取得できます。

defaultdictでは、存在しないキーでアクセスすると、初期値を作成して取得できます。
dictでは、存在しないキーでアクセスするとエラーになるので、キーが存在するかどうかのチェックが必要です。

defaultdict(list)では、初期値は空のリストになります。

defaultdict(クラスや関数など)
defaultdictは辞書と同じように利用できます。defaultdict(XXX)とすると、参照したときにキーが存在しないと、自動的にXXX()で初期化します。
defaultdict(list)で作成すると、存在しないキーの場合にlist()で初期化されます。
リストに要素を追加したいときに、キーが存在するかチェックすることなく、いきなり追加できます。
dc = {}
for it in data:
if it[1] in dc:
dc[it[1]].append(it)
else:
dc[it[1]] = [it]
上記の処理と下記の処理は、同じ結果になります(dc == dd)。

dd = defaultdict(list)
for it in data:
dd[it[1]].append(it)

dequeは、Double Ended QUEueで、両端キューと言われます。

リストは、最後に追加削除する場合は、O(1)ですが、それ以外の位置に追加削除すると、効率が悪いです。
dequeは、最初と最後に追加削除する場合、O(1)でできます。

dequeの主なメソッド
append:最後に追加
appendleft:先頭に追加
pop:最後から削除して返す
popleft:先頭から削除して返す
extend:最後に連続して追加
extendleft:先頭に連続して追加
rotate(n):全体でnステップだけ右(負なら左)にローテート
dequeは、先頭に追加や削除をしないといけないデータを扱うときに、便利です。

collections.Counterを使うと、簡単に項目をカウントできます。

collections.defaultdictもシンプルな機能ですが、覚えると役に立つ機会があるでしょう。

defaultdictはdictと同じように使えますが、dictそのものが欲しい場合は、本問のようにdictに変換すると良いでしょう。

dd = defaultdict(int)
for s in data:
dd[s] += 1
print(dict(dd))

文が回文(逆にしても同じ文)かどうか判定する関数is_palindromeを完成させてください。

PyQで学習中:https://pyq.jp/

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
ありがとうございました。
3
機械学習(マシーンラーニング)、AI、ブロックチェーン、統計、データサイエンティスト、データ集計、言語としてのPythonを勉強中です。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。