変数、文字列、数値といった基礎的なデータを扱ってきましたが、今度はこれらを組み合わせて複雑なデータ構造を扱っていくことになります。
まずはリスト型から扱っていくことにします。リストは0個以上の複数のデータを一覧にして管理することができます。
他のプログラミングでは配列のようなものですが、全く同じということではないんですよね。リストには違う種類のデータ型を格納できたりするのがその違いです。
リストにはどんなオブジェクトでも入れることができるんですよね。
では、さっそくリストを作っていきましょう。
リストの作成とインデックス
リストを定義していきましょう。リストを作成するには角括弧([])を利用します。この中に、カンマ(,)を使って要素を区切って入れていきます。
次のようなリストを用意してみました。
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, "apple", "python"]
対話型シェルで実際に見ていきましょう。
それぞれのリストを変数a、bに入れて表示しています。要素はカンマで区切られていますね。bの方には数字と文字列が要素になっています。
文字列のところでインデックスを扱いましたが、同様にリストにもインデックスが割り当てられています。先頭の要素のインデックスを「0」として順番に振られています。
[“a”, “b”, “c”, “d”, “e”]というリストで見ていくと、要素の”a”がインデックス「0」、”b”がインデックス「1」、”c”がインデックス「2」、”d”が「3」、”e”は「4」ということになります。後ろからはマイナスのインデックスになります。
こんな感じですね。
[“a”, | “b”, | “c”, | “d”, | “e”] |
0 | 1 | 2 | 3 | 4 |
-5 | -4 | -3 | -2 | -1 |
文字列でやった時のことを考えれば理解しやすいと思います。
list()でリストを作成する
リストは角括弧[]で要素を括ることで作成できますが、list()を使ってリストを作る方法もあります。
次のコードを実行してみましょう。
x = list()
y = list("python")
実行結果はこうなります。
最初のものは、空のリストを作成しています。下側は、「python」という文字列から各文字を要素としたリストを作成しているのがわかります。
type()で確認するとリスト型になっているのもわかりますね。
インデックスを指定しリストの要素を取り出す
それではこのインデックスを使って、リストから要素を取り出してみます。
リストを代入した変数に角括弧を続けて、その中に取り出したいインデックスを指定します。
次のようなコードになります。
a = [1, 2, 3, 4, 5]
a[0]
a[1]
a[4]
a[-1]
a[-2]
a[100]
これをそれぞれPythonシェルで実行して見るとこうなります。
文字列で要素を取り出したことと同じイメージですね。それぞれインデックスに対応した要素が取り出されています。
最後のインデックスに要素数を超えたものを指定した場合は、リストの要素数の範囲外だとしてエラーになっています。
リストのスライス
要素の取り出しができるならスライスも文字列の時と同様に可能です。範囲指定して取り出すこともできます。
次のコードで試してみましょう。
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b[0:3]
b[:3]
b[1:4]
b[2:]
b[:]
b[::2]
b[::-1]
Pythonシェルで実行してみます。
それぞれ次のようになるはずです。
全て文字列で操作した時と同じように扱えますね。
1つ目と2つ目は同じ操作をしていて、最初から3つの抽出です。3つ目はオフセット1から4の抽出で2番目から4番目のデータをリストにして抽出しています。4つ目は2番目以降を全て抽出。5番目はコロンだけを指定することで全てを抽出しています。5番目は最初から2個ずつのデータを抽出。最後はリストを逆にしています。
リストのリスト – リストの入れ子
これまでリストには数値の文字列を入れてきました。リストには全てのオブジェクトを入れることができるので、リストを要素に持つことができます。リストを入れ子構造で作ることもできるわけです。
具体的に作って見ましょう。
x = ["Twitter","Facebook","LINE"]
y = [100, 200, 300]
z = [1, 2, "apple", x, y]
x、yそれぞれ文字列と数字のリストになっています。zは数値、文字列、そしてリストの変数x、yを要素に持ったリストになっています。
このzを表示してみましょう。
対話型シェルで実行してみます。
zのリストの中に、xとyの要素を持ったリストが入っているのがわかりますね。
このzの要素もインデックスを指定して次のように抽出することができます。
z[3]
z[4][0]
続けて実行するとこうなります。
オフセット3の要素であるxが取り出されているのと、オフセット4のyの要素の中の1番目のデータが取り出されているのがわかりますね。
リストの要素の削除
ついでにリストの要素の削除をやっておきましょう。
先ほどに続けて、delキーワードを使ってインデックスで指定した要素を削除してみます。
del z[4][0]
実行すると結果はこうなります。
z[4][0]に当たるのは、yの一番最初のデータ「100」です。結果を見ると、zからその部分だけが削除されています。
まとめ
リストは角括弧([])を使って、要素をカンマ(,)で区切ることで作成できます。
要素はそれぞれ先頭からインデックスが振られていて、それをオフセットとしてデータの抽出、スライス、削除ができます。
リストは、どんなオブジェクトも格納できます。数値や文字列だけでなく、リストも要素として持つことができるので、入れ子構造を持ったリストも作成できます。