Python コンテナ
コンテナ(コレクション)と呼ばれる、オブジェクトをまとめて管理するためのデータ構造について。
文字列
要素(オブジェクト)を順序付けて管理するコンテナをシーケンスと呼ぶ。すでに登場していた文字列オブジェクトは文字要素のシーケンスである。
文字列は"(ダブルクォーテーション)か'(シングルクォーテーション)で囲んで定義する。また、文字列オブジェクトはstr型のオブジェクトである。
コンテナに含まれる要素の数はlen関数で調べられる。
"か'のどちらか3個で文字要素を囲むと、複数行に渡る文字列を記述できる。改行の箇所には改行を表す¥nが含まれる。macでは\nになる。
先ほどの改行記号はエスケープシーケンスの1つである。エスケープシーケンスは画面上への文字の出力の際、特殊な文字や機能として解釈される文字の組み合わせで、先頭に¥(macでは\)が付く。
エスケープシーケンスを無効にして書かれたままの文字列を表示させるには、文字列の先頭にrを付ける。このような文字列をraw文字列と呼ぶ。
文字列型には多くのメソッドが用意されている。capitalizeメソッドを呼び出すと、先頭の文字を大文字にした文字列が返される。
文字列のひな形にオブジェクトの値を埋め込み、文字列を作成することができる。これにはformatメソッドか、f文字列を使う。文字列リテラルの先頭にfを付けると{}内の式の値が文字列に挿入される。
文字列フォーマットは挿入される値の書式を柔軟に指定できることが利点である。挿入する変数の後に:に続けて書式を指定する。
リスト
リストも要素を順序付けて管理するシーケンスの1つ。リストは任意のオブジェクトを要素に持つことができる。要素を,(カンマ)で区切り、全体を[ ]で囲んで記述する。
リストの要素にリストを指定することもできる。
文字列やリストのようなシーケンスは+演算子を使い、複数のシーケンスを結合させたシーケンスを作ることができる。
インデキシングとスライシング
文字列やリストなどのシーケンスではインデックスを指定して要素を選択することができ、それをインデキシングと呼ぶ。インデキシングではシーケンスの後ろに[ ]で囲んだ整数を記述する。インデックスは先頭(左端)の要素が基準の0、その右が1、というように振られた一連の番号。インデキシングでは負の整数も使用でき、文字列の末尾(右端)の番号は-1とも指定できる。
スライシングはインデックスの範囲指定によって要素を選択する操作。範囲は[開始インデックス:終了インデックス]という形式で指定する。[2:5]と指定すると、インデックスが2以上5未満の範囲で要素が切り出される。
開始インデックスを省略した場合は先頭から、終了インデックスを省略した場合は末尾までが範囲になる。[:3]では先頭から3未満の範囲が選択される。先頭から末尾までの全範囲は[:]で参照する。
また、スライシングでは[開始インデックス:終了インデックス:増分値]という形式により指定範囲から任意の間隔で要素を選択できる。増分のデフォルト値は1で、増分値を2とすれば1つおきに要素が選択される。増分値にも負の値を指定できる。
変更可能オブジェクト
オブジェクトには変更可能(ミュータブル)、変更不能(イミュータブル)という性質がある。変更可能オブジェクトは作成された後からでも値を変更できる。ここまで登場した型の中ではリストが変更可能で、数値や文字列は変更不能である。 変更可能なシーケンスは要素を追加・変更・削除することができる。要素の変更にはインデキシングやスライシングと代入文を使う。
要素を追加するにはappendメソッドなどを使う。
要素を削除するにはdel文を使用する。
リストなどの変更可能オブジェクトには注意すべきことがある。1つの変更可能オブジェクトに対して複数の参照があった場合、そのどこからでも値を変更できてしまう。
同じ値を持つ、別物の変更可能オブジェクトを作成したい場合は、配列のcopyメソッドか[:]のスライシングを使ってオブジェクトをコピーする。
タプル
タプルはリストに似たシーケンスだが、変更不能オブジェクトである点が異なる。タプルにはリストよりもメモリ使用量が小さいという利点がある。
また、タプルも任意のオブジェクトを要素に持つことができるので、ネスト構造にもできる。タプルは要素を, で区切り、全体を( )で囲んで記述する。
呼び出し操作の()の中や、コンテナのリテラルの中などでなければ()は省略できる。なお、要素が1つの場合は末尾に,が必要となる。
タプルを使えば複数の変数の代入をまとめて記述できる。
また、タプルのアンパックを使い、変数の値の入れ替えを簡潔に書くことができる。
辞書
辞書(マッピング)は個々の要素に識別用の値を設定できるコンテナである。識別用の値をキーと呼ぶ。辞書はシーケンスではないのでインデキシング等による要素の選択はできない。辞書はキー:値のペアを,で区切って並べ、全体を{ }で囲んで記述する。
辞書では辞書[キー]の添字表記で要素を参照できる。辞書に指定したキーが存在しない場合はエラーとなる。
また、辞書は変更可能オブジェクトなので、キーで要素を参照して値を書き換えることができる。また、指定したキーが辞書に存在しなければ、新しい要素として辞書に追加される。