Pythonでデータを扱うものにタプルというものがあります。タプルはリストと同じように、いろんなデータの要素を格納して管理することができます。
リストとの違いは、タプルは要素をあとで追加したり削除したり書き換えたりすることができないというのが特徴です。これをイミュータブルといいます。
リストとの違いを意識しながらタプルについて学んでいきましょう。
タプルを定義する
タプルを作成していきましょう。タプルを作成するには丸括弧()を利用します。この中に、カンマ(,)で要素を区切って入れていきます。
タプル =(要素1, 要素2, 要素3, 要素4, …)という形になります。
空のタプルは丸括弧()を使うだけで作ることができます。
empty_tuple = ()
データの入ったタプルを作るには、要素をカンマ(,)で区切って丸括弧()で囲んでもいいですし、変数に、カンマで区切った要素を代入してもタプルを作ることができます。
t1 = (1, 3, 5, 3, 7, 5)
t2 = 2, 7, 8, 3, 9, 1
それぞれ実行してみましょう。
丸括弧で囲まれたデータの組が出来上がっていますね。
タプルも要素にインデックスが割り当てられています。このインデックスを使って、要素を取り出したりスライスしたりすることができます。
コードで試してみましょう。
t = (10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
t[2]
t[3:8]
順番に実行するとこうなります。
インデックスに該当する要素が抽出され、範囲指定されたタプルが出力されています。type()で確認すると「タプル型」であるのがわかりますね。
最初に、タプルは書き換えることができないと説明しました。リストと同じように書き換える操作をやってみるとどうなるか見てみましょう。
t[4] = 1000
オフセット4の位置のデータを「1000」に変えるコードです。
続けて実行するとこうなります。
このようにエラーになりました。タプルは要素を置き換えたり、書き換えたりすることはできないのです。
要素が一つだけのタプルを作るとき、気をつけておきたいことがあります。それは後ろにカンマ(,)をつけることです。こうすることでタプルと認識してくれます。
実際にやってみましょう。
x = 100
y = (200,)
z = 300,
それぞれ実行して、ついでにtype()で型も確認してみましょう。
このように1つ目は単に整数型の数値ですが、2つ目と3つ目はタプルになっているのがわかりますね。
タプルのメソッドと操作
タプルは要素を変更することができないので、メソッドもindex()とcount()くらいしかありません。
タプルのメソッドは、index()とcount()のみ
次の例でやってみましょう。
t = (1, 2, 4, 6, 8, 5, 2, 7, 4, 4)
t.index(2)
t.count(4)
実行するとこうなります。
タプルの最初の「2」の値がインデックス「1」の位置、つまり先頭から2番目にあり、タプルの中に「4」という値が3つあるということがわかります。
タプルの足し算
タプルは要素の操作はできませんが、タプル同士の足し算はすることができます。
t1 = (1, 2, 3)
t2 = (10, 20, 30)
t1 + t2
二つのタプルを用意して、足し算して実行するとこうなります。
二つのタプルのそれぞれの要素が、1つのタプルの要素としてまとめられているのがわかります。
タプルの要素にはリストを持つことができますが、要素としてのリストを変更することはできませんが、リストの中の要素の変更はすることができます。
t = ([2, 4, 6], [1, 3, 5])
t[0] = 100
t[1][0] = 100
タプルの最初の要素を「100」に変更する操作と、タプルのオフセット「1」の要素の中の最初の要素を「100」に変更するコードを書いてみました。
これをそれぞれ実行してみるとこうなります。
タプルそのもの自体は変更することができずにエラーが発生していますが、右側のリストの先頭の要素は変更することができています。
tuple()で変換
tuple()を使うと、他のデータ型からタプルを作ることができます。
例えばリストをこの中に入れると、タプルに変換することができます。
lang = ["Python", "JavaScript", "Swift"]
tuple(lang)
このコードを実行してみましょう。
リストがタプルに変換されているのがわかりますね。
タプルのアンパッキング
タプルを使えば、複数の変数に1文で値を渡すことができます。
3つの値を持ったタプルと、3つの変数を用意します。次のようにタプルを代入してみましょう。
pilot = ("Setsuna", "Lockon", "Allelujah", "Tieria")
EXIA, DYNAMES, KYRIOS, VIRTUE = pilot
これを実行してみます。ちなみにガンダム00のパイロットの名前でタプルを作ってモビルスーツの名前を変数にしています。それぞれを対応させているコードです。
変数のそれぞれの位置とタプルの値が対応しているのがわかりますね。これをタプルのアンパックと呼んでいます。
いくつでも対応させることができますが、現実的には3つくらいまででしょうね。たくさんになると、逆にわかりにくくなりますので。
まとめ
タプルはリストに形は似ていますが、イミュータブルであるというのが特徴でリストのように要素を変更したり削除したりすることはできません。
タプルは要素をカンマ(,)で区切って、丸括弧()で囲むことで作ることができます。tuple()を使えば、他のものをタプルに変換することができます。
タプル同士の足し算は可能です。
タプルの要素と同じ数の変数を対応させて、1行でコード展開することができます。これはタプルのアンパックと呼ばれています。