今回のお題
今回は、Pythonのタプルという概念について取り上げます。
私が経験している他の言語ではあまり馴染みがなかったので筆を取ったというのが本音で基本的には自分用のメモですが、私と同じように他言語から流れてきたPython初学者の方の参考になれば幸いです。
目次
- タプルの概要
- 色々なタプル
- タプルでできないこと・できること
- タプルとリストの使い分け
タプルの概要
タプルは何かを一言で説明すると、「後から要素を変更できないリスト」になります。
listやintなどと同じく、tupleというクラスも存在します。
タプルには配列とは異なり要素を()で区切るという特徴がありますが、逆に言えば他の操作はリストと同じように行えます。
# タプルの生成
tuple1 = ('a', 'b', 'c')
# 要素の取り出し
print(tuple1[0])
# for文
for str in tuple1:
print(str)
色々なタプル
色々な、というわかりにくいタイトルですが、要素の数などによって若干表記が変わるということの解説です。
# 通常の表記
tuple1 = ("a", "b", "c")
# 空のタプル
empty_tuple = ()
# 空でないタプルに関しては、、カッコは省略可能
tuple2 = "d", "e"
# 要素が一つの場合にも、末尾に,が必要
tuple3 = "f",
要素が一つの場合に最後の,を省略すると、()の有無に関わらずタプル以外の型(上記であればstr)として解釈されるので注意してください。
タプルではできないこと・できること
冒頭でも説明した通り、タプルでは要素の変更ができません。
また、要素の追加もできません。
tuple = "a", "b", "C"
tuple[0] = "d" # これはできない
tuple1.append("d") # これもできない
逆に、タプル同士の結合は可能です。
tuple1 = 1, 2, 3
tuple2 = 4, 5
tuple3 = tuple1 + tuple2
print(tuple3) # 結果:(1, 2, 3, 4, 5)
また、ややこしいのですが
- ある変数xにタプルが代入されている場合に、その変数に別の値を代入することは可能。
- あるタプルがリストや辞書を配列として持つ場合に、そのリストや辞書に操作を加えることも可能。
- タプルが変数xを要素として持つ場合に、xの値を更新してもタプルの要素には影響しない。
list = [1, 2]
dict = {"name" "jiro"}
x = 10
tuple = x, list, dict
tuple = (3, 4, 5) # これは変数の更新なので可能
tuple[0][0] = "a" # これはlistの操作なのでOK
tuple[0].append(3) # これもOK
tuple[1]["name"] = "saburo" # これはdictの操作なのでOK
tuple[1]["age"] = 30 # これもOK
x = 20 # これをしてもtupleの要素には影響はない
print(tuple[0]) # 結果:10
この辺りは注意点としてあげておきます。
タプルとリストの使い分け
基本的に上記が守られている限りはタプルとリストのどちらを使っても問題はありません。
ただ、公式ドキュメントによると、「同じ型のものを集める場合にはリスト、違う型のもの同士を集める場合にはタプル」という慣習もあるようです。
例えば、生徒全員の名前を集めるのであればリスト、生徒1人の氏名・クラス・住所を管理するのであればタプルといった感じですね。
終わりに
以上、pythonのタプルについてまとめてみました。
もちろん、タプルにするぐらいであれば辞書のほうが便利なケースも多いので極論を言ってしまえばタプルを全く使わなくてもプログラムを書くことは可能かもしれません。
ただ、djangoではデフォルトの記述の中に一部タプルが用いられていることもあり、理解しておいて損はない概念なのかなと思います。