タプル



タプルとは、シーケンス型のオブジェクトです。同じくシーケンス型のオブジェクトとの違いは、不変であるということです。リストは生成後に要素を追加したり削除したりできますが、タプルは生成後に内容を修正できません。

タプルの生成

タプルは、括弧の間に数字をカンマ区切りで記述します。要素が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'])

Facebook comments:

comments

Leave a Reply


Get Adobe Flash player