タプル
タプルとは、シーケンス型のオブジェクトです。同じくシーケンス型のオブジェクトとの違いは、不変であるということです。リストは生成後に要素を追加したり削除したりできますが、タプルは生成後に内容を修正できません。
タプルの生成
タプルは、括弧の間に数字をカンマ区切りで記述します。要素が1つの場合は要素の後ろにカンマを1つ付加する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> tupleA = (1,2,3) >>> tupleB = (1,) >>> tupleC = (,) #要素数が0のタプルは記述できないようです File "<stdin>", line 1 tupleC = (,) ^ SyntaxError: invalid syntax >>> (1,2,3)[1:2] (2,) >>> (1,2,3)[1:1] () >>> tupleA (1, 2, 3) >>> tupleB (1,) |
括弧の間に要素を1つだけ書くと、計算の優先順位の括弧と見なされます。
1 2 | >>> (1) 1 |
要素へのアクセス
リストと同様です。
1 2 3 4 5 6 7 | >>> tupleD = ("A", "B", "C") >>> tupleD[0] 'A' >>> tupleD[1] 'B' >>> tupleD[2] 'C' |
スライス
リストと同様にタプルの一部を取り出せます。
1 2 3 4 | >>> tupleD[0:2] ('A', 'B') >>> tupleD[::-1] ('C', 'B', 'A') |
値の変更
タプルは不変のオブジェクトなので、内容は変更できません。
代入(assignment)をサポートしているかどうかが、リストとの本質的な違いですね。
1 2 3 4 | >>> tupleD[1] = "C" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment |
要素数の取得
リストと同様の方法でタプルのサイズを取得できます。
1 2 3 4 | >>> tupleD ('A', 'B', 'C') >>> len(tupleD) 3 |
シーケンス(リストや文字列)からタプルを作成
1 2 3 4 5 6 | >>> tuple("hello") ('h', 'e', 'l', 'l', 'o') >>> tuple([1,2,3,4,5]) (1, 2, 3, 4, 5) >>> tuple({1:"one",2:"two",3:"three"}) #ディクショナリからタプルを作ると、値は無視されます。 (1, 2, 3) |
タプルでも、要素内は変更可能
tupleEは2つのリストを所持しています。tupleE内のリスト自体を入れ替えようとすると例外が発生しますが、リスト内の値を書き換えることは出来ます。
1 2 3 4 5 6 7 8 | >>> tupleE = ([1,2,3],["a","b","c"]) >>> tupleE[0] = "abc" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> tupleE[0][0] = "abc" >>> tupleE (['abc', 2, 3], ['a', 'b', 'c']) |