![]()
7.構造型データ (2015.2.19)
■リスト
複数の数値や文字列等の要素を、一定の順番で並べた構造のデータ型をリストと呼びます。他の言語では配列に相当するものだと思います。リストは次のように定義されます。
[要素1, 要素2, 要素3, ・・・]
リストはシーケンス型のため、インデックスで指定することもできます。最初の要素が0番であることに注意して下さい。リスト内の要素は色々な型が混在しても良く、更に要素の中に入れ子になった要素も可能です。全部をまとめたリストの例を次に示します。
>>> a = ['Python', 1234, 1.234, [5, 6, 7]]
>>> a[0]
'Python'
>>> a[3][1]
6
2つ目の例は入れ子になった要素です。3番目(0番から数える)の要素である[5, 6, 7]の1番目(これも0番から数える)の要素なので、答えが6になるわけです。
インデックスで指定して必要なデータを取り出せるので、色々試してみると良いでしょう。リストは次のように自由に入れ替えができます。
>>> a = [1, 2, 3 ,4]
>>> a[1] = 5
>>> a
[1, 5, 3, 4]
これも上の例のように考えればわかります。リストは次のように複数の要素を一度に指定することもできます。
>>> a = [1, 2, 3, 4]
>>> a[0: 2]
[1, 2]
[ ]内はインデックスを指定する範囲で、[x: y]と指定したらxからy-1の範囲となります。従って上記では要素の0番目と1番目が対象となります。範囲指定では片方の記述を省略することもできますが、きちんと記述しておいた方がわかり易いと思います。なお、範囲指定を使えば、まとめて要素を入れ替えたり、その上で更に要素を追加することもできます。テキストに例が書かれているので、確認する前に上記を応用して自分で考えてみると良いと思います。
演算子を使えば、リストを連結したり繰り返すこともできます。これも前に学んだ演算子を応用すれば理解できます。ちょっと変わっているのが、accept()メソッドやextend()メソッドを使った要素の追加でしょう。宣言済みの要素の後に、前者は単独、後者は複数の追加が可能です。Javascript等では宣言無しに要素をどんどん追加できましたが、Pythonではメソッドによって操作する必要があるようです。
逆にリストから任意の要素を削除することもできます。これにはdel文を使います。また、最後尾の要素を削除するpop()メソッドというものもあります。要素を減らす操作というのは個人的には経験が無いので、Python特有のものなのでしょうか。更に、要素を逆順に並び替えるreverce()メソッド、指定した順に並び替えるsort()メソッド等があります。リストを色々と操作する方法が用意されているので、最初に宣言したリストを後から自由に再構築できそうです。
■タプル
リストに似ていますが、リストと異なり1度宣言したら変更できません。実制御においては、RAMでは無くROMに書き込まれるデータと考えれば良いと思います。タプルは( )で囲うところがリストと違う点で、次のように定義されます。
(要素1, 要素2, 要素3, ・・・)
リスト同様シーケンス型なので、インデックスで指定できるのが特長です。複数の要素を一度に指定できるし、演算子を使って連結したり繰り返すこともできます。ただし、一部を入れ替えたり削除するようなことはできません。つまり大元のデータ構造はいじることができないわけです。
■ディクショナリ
キーとそれに対応する値をペアにしたデータ型で、キーを使って値を指定します。リストやタプルと異なり、要素が順に並んでいるわけでは無いので、文字通りキーが鍵となります。キーと値は同じ型である必要はありません。ディクショナリは次のように定義されます。
{キー1: 値1, キー2: 値2, キー3: 値3 ・・・}
例を示すと、
>>> a = {1: 'Raspberry', 2: 'Pi'}
>>> a[1]
'Raspberry'
>>> a = {'x': 'Raspberry', 'y': 'Pi'}
>>> a['y']
'Pi'
ディクショナリは入れ子にしたり他の値に変更することができます。また、要素を追加したり削除(del文またはpopメソッド使用)することもできます。
![]()