どうも!リョクちゃです。
あいからず暑い日が続きますね、
最近はゲリラ豪雨などにも見舞われるそんなこの頃、リョクちゃです。
今回は、シーケンス型の一つとして扱われる”タプル型”について
使い方なんかを紹介していきます。
リストを前々回学んでいれば、すぐに使えると思います。
実は、リストに書き方も似ているので……。
ちなみに前回は入力値の受け取り方について学びましたね。
リストについては、こちら
目次
タプルってなに??
タプル(tuple)とは、複数の要素からなる一組を表す単語の総称といわれています。
リスト型に非常に似ていて、同様に複数の値(データ)をまとめるのに使われています。
特徴として、
- 要素の追加、変更、削除ができません。→ これを”イミュータブル”な型といいます。
- 作成しかできない。
- カンマ区切りの要素の並びを丸かっこ(,)で囲んで表記されます。
- タプルを参照している変数に再度代入することは可能。
- タプルの中の要素がミュータブルな型(リストなど)の場合は変更ができる。
といったのが挙げられます。
大きく、タプルとリストの違うところが、
タプルは変更が不能なイミュータブルな型であるということです。
特徴について、それぞれ簡単に解説していきます。
タプルの基本構造
その前にタプルの基本構造は下のようになります。
これをPythonで書くと、
1 2 |
# タプル基本構造 tplX = ('Apple', 'Egg', 'hoge', 123) |
変数tplXにタプル型の値を代入しています。
これを図にしてみると、
インデックスの考え方はリストと同じになっています。
タプルは要素の追加、変更、削除ができない……
下のようなタプルがあるとして、解説を進めていきます。
1 |
tplX = ('Apple', 'Egg', 'hoge', 123) |
変数tplXの0番目の要素を変更したい場合、
Pythonで書くと、
1 2 |
tplX = ('Apple', 'Egg', 'hoge', 123) tplX[0] = 'Orange' |
これを実行すると、
下のようなエラーが出ます。
1 2 3 4 5 6 7 |
tplX = ('Apple', 'Egg', 'hoge', 123) tplX[0] = 'Orange' # 例外が発生しました: TypeError # 'tuple' object does not support item assignment # File "Pythonファイル名", エラー発生行番号, in <module> # tplX[0] = 'Orange' |
エラーとしては、タプルはイミュータブルな型であるからその行為はサポートしてませんよ。
といった内容になります。
タプルの要素がミュータブルな型の場合は変更可
この場合をイメージすると下のようになります。
Pythonでは、
1 |
tplX = (['Bacon', 'Egg'], 'Apple', 123) |
ここで、
下のようなことは可能なのか……
この流れをPythonで書くと、
1 2 |
tplX = (['Bacon', 'Egg'], 'Apple', 123) tplX[0][1] = 'Bike' |
実行すると……
エラーが発生することなく、コードが実行されました。
タプルの中にミュータブルな型であるリストに関しての変更であれば、
可能だということです。
実際に下のコードで流れを追ってみてみます。
1 2 3 4 |
tplX = (['Bacon', 'Egg'], 'Apple', 123) print(tplX) # (['Bacon', 'Egg'], 'Apple', 123) tplX[0][1] = 'Bike' print(tplX) # (['Bacon', 'Bike'], 'Apple', 123) |
置き換わっているのがわかります。
タプルを参照している変数に再代入することは可
タプルでは、要素の追加や変更、削除などはできないイミュータブルな型でした。
たとえば、下のような場合、
こんなとき、下のようなことができるのでしょうか、
変数tplXに異なるタプルを代入したい場合になりますね。
これができるのでしょうか……?
できてしまいます。
ただし、同じ変数名でしかできないので注意が必要です。
タプルはどんなとこで使われるの??
さて、癖のあるタプルですが、
たとえば、
- 変更をしたくない変数を定義する場合に便利
- タプルを使うことで処理の高速化 → メモリ効率が良くて、変数へのアクセスも高速
- 辞書型のキーとして使える。
辞書型については、また別の回で解説します。
今は、辞書という型に対してタプルが使えるというのだけを覚えておいてください。
実際、タプルは、リストに比べると柔軟性は高くありませんが
効率といった観点で評価した場合、リストよりも上です。
複雑なコードを書くようになった場合、
タプルで置き換えが可能なところには試してみてもよいかもしれませんね。
練習問題
① タプル変数(1,2,3)が与えられます。
タプルの値をx,y,zの変数にそれぞれ格納し、変数名:値を出力してください。
※ Pythonでは、シーケンス型の個数と変数の個数が等しい場合、
それぞれ1行で各要素を変数に代入することが可能です。
たとえば、リスト変数[a,b]があります。
これをそれぞれi,jに代入したい場合、
1 2 3 4 |
i, j = ['a', 'b'] # i = 'a' # j = 'b' |
② タプルとリストの違いを簡単に説明してください。
おわりに
タプルについて簡単に特徴や使い方について解説しました。
なんとなくイメージがつかめて実際に使えるようになってもらえたら嬉しいです。
次回あたりには、辞書型について解説していこうかなと考えています。
Pythonでリスト、タプル、辞書を学べば、いろいろなことができるようになりますので、
これをきっかけに学んで、いろんなプログラムを作っていきましょう。