Pythonにはlist型によく似たタプル(tuple)型というシーケンス型があります。listと異なる点は、一度初期化したタプルの要素は変更できない、という点です。この性質のことをイミュータブル(不変)と呼びます。このため、要素を更新、削除したりタプルそのものの順序をソートするような更新系の処理をすることはできません。
タプルの初期化
タプルは丸括弧で要素をカンマ区切りで初期化します。なお、要素が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)
リストからタプルへの変換
タプルは組み込み関数の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]
タプルのメリット
listと比較すると、更新系の処理ができないため不便に感じるかもしれませんが、あるリストの途中値を途中で変えさせないで安全に保持したいとき等に活躍します。また、listと比較して(少しだけ)処理する際のスピードが速いです。また、イミュータブルなのでハッシュ化することが可能です。ハッシュ化については別項にて説明しますが、変更が不要なシーケンスの場合はタプルを使うことも検討してみてください。