Pythonにはシーケンスの一種でタプル(tuple)型と呼ばれる型があります。このページではタプルについて解説します。
タプルとは
冒頭で述べたとおり、Pythonにはタプル(tuple)型というシーケンスの型があります。リストと同様に順序付けられた複数の値を格納することが可能です。リストと異なる点は、一度初期化したタプルの要素は変更できない、という点です。この性質のことをイミュータブル(不変)と呼びます。このため、要素を更新、削除したりタプルそのものの順序をソートするような更新系の処理をすることはできません。(以降、タプル型の変数を単にタプルと記述することがあります。)
タプルの初期化
タプルは丸括弧で要素をカンマ区切りで列挙して記述します。なお、要素が1つしかない場合は必ずカンマをつけなければなりません。また、丸括弧は省略することも可能です。
サンプルを見てみましょう。
# 要素がないタプル t1 = () print(t1) # () # 要素がひとつの場合はカンマをつけないと、単一の値とみなされてしまう。 t2 = (1) print(t2) # 1(単一の値扱い) # 要素がひとつの場合はカンマをつける t2 = (1,) print(t2) # (1,) # カンマ区切りで複数の要素をセットする t3 = ('a', 'b', 'c') print(t3) # ('a', 'b', 'c')
また、末尾にカンマを残しても構いません。
t = (1, 2, 3,) print(t) # (1, 2, 3)
タプルの要素数
リストと同様、len関数を使用するとタプルの要素数を得ることができます。
t = (1, 2, 3,) l = len(t) print(l) # 3
リストからタプルへの変換
タプルは組み込み関数のtuple()を使用してリストから生成(変換)する方法があります。
# リストを初期化 l = [1, 2, 3] # リストからタプルを初期化(リストをタプルに変換) t = tuple(l) print(t) # (1, 2, 3)
タプルからリストへの変換
また、逆にタプルからリストを生成する場合はこちらで触れましたが、list関数で可能となります。
t = (1, 2, 3,) l = list(t) print(l) # [1, 2, 3]
タプルのメリット
リストと比較すると、更新系の処理ができないため不便に感じるかもしれませんが、一度確定した値を途中で変えさせないで安全に保持・受け渡ししたいときに活躍します。特に関数のコールシーケンスが複雑な場合、リストのように途中で変更が入る可能性がある場合、思わぬ不具合が発生する原因になるためタプルを使用したほうがより安全にコーディングすることができます。
また、リストと比較して(少しだけ)処理する際のスピードが速いです。また、イミュータブルなのでハッシュ化することが可能であるため、後述する辞書のキーとして使用することが可能です。