6.1. コンテナデータ型¶
データ処理を行うには、まずデータをメモリに格納します。 この時、どのようなデータ形式で格納するのがよいかは、その後に行う処理に依ります。 言い換えると、行いたい処理に応じて、データ構造を適切に選ぶ必要があります。 データ構造によって、プログラムの内容が決まると言っても言い過ぎではありません。 メモリ上にデータを格納する容器(型)のことを コンテナ と呼びます。
Pythonには、リスト型(list)、タプル型(tuple)、辞書型(dict)、集合型(set) の4つのコンテナがあります。 また、数値データ(ベクトルや行列)に対しては、NumPyの numpy.ndarray 型が最適です。
6.1.1. collections¶
collections という拡張モジュールには、さらに有用なコンテナデータ型が用意されています。 公式ドキュメント(collections )から一覧を転載します(バージョン3.9.1):
コンテナデータ型 |
説明 |
---|---|
namedtuple() |
名前付きフィールドを持つタプルのサブクラスを作成するファクトリ関数 |
deque |
両端における append や pop を高速に行えるリスト風のコンテナ |
ChainMap |
複数のマッピングの一つのビューを作成する辞書風のクラス |
Counter |
ハッシュ可能なオブジェクトを数え上げる辞書のサブクラス |
OrderedDict |
項目が追加された順序を記憶する辞書のサブクラス |
defaultdict |
ファクトリ関数を呼び出して存在しない値を供給する辞書のサブクラス |
UserDict |
辞書のサブクラス化を簡単にする辞書オブジェクトのラッパ |
UserList |
リストのサブクラス化を簡単にするリストオブジェクトのラッパ |
UserString |
文字列のサブクラス化を簡単にする文字列オブジェクトのラッパ |
namedtuple は要素に名前を付けてアクセスできるタプルの拡張型です(c言語の構造体のようなもの)。「タプルだと要素の順番が分からなくなってしまう、でもクラスを作るほどでもない」という場合に便利です。 OrderedDict は辞書型の拡張で、要素の順番が保存されます。 Counter は要素の統計を取る場合に便利なコンテナです。【例題】文章の情報エントロピー で使用します。
collectionsモジュールについては、Effective Python 1st Edition [2] の "Item 46: Use Built-in Algorithms and Data Structures" が参考になります。