7. タプル#
7.1. 基本#
リストと同様に、タプルも複数の値・オブジェクトをまとめる。要素を,
で区切って並べ、全体を( )
で囲んで作成する。
t = (0, 1, 4, 9, 16, 25, 36, 49)
t
(0, 1, 4, 9, 16, 25, 36, 49)
type(t)
tuple
リストと同じように要素にアクセスできる。
t[0]
0
t[-1]
49
t[::-1]
(49, 36, 25, 16, 9, 4, 1, 0)
リストと同じように、タプルにある要素が含まれるかどうかチェックできる。
16 in t
True
16 not in t
False
タプルは不変なオブジェクトであるため、タプルの要素は変更できない(可変と不変を参照)。
t[0] = 1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_204970/1253691622.py in <module>
----> 1 t[0] = 1
TypeError: 'tuple' object does not support item assignment
タプルに要素を追加することもできない。
t.append(64)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/tmp/ipykernel_204970/1701743339.py in <module>
----> 1 t.append(64)
AttributeError: 'tuple' object has no attribute 'append'
7.2. パック・アンパック#
タプルを作成するときの括弧は省略できる。
t = 2, 4, 6
t
(2, 4, 6)
type(t)
tuple
タプルの各要素の値を取り出しながら代入できる(「アンパック」と呼ばれる)。
x, y, z = t
x
2
y
4
z
6
要素数が合わないとアンパックできない。
x, y = t
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_204970/2108149690.py in <module>
----> 1 x, y = t
ValueError: too many values to unpack (expected 2)
x, y, z, a = t
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_204970/2150772074.py in <module>
----> 1 x, y, z, a = t
ValueError: not enough values to unpack (expected 4, got 3)
カンマ(,
)で区切ることで、複数の変数に値をまとめて代入できるのは、右辺の複数の値がタプルにまとめられ(「パック」と呼ばれる)、そのタプルの各要素が左辺でアンパックされて代入されることによる。
x, y, z = 1, 3, 5
x
1
y
3
z
5
ひとつのセルの中で複数の変数や値をカンマで区切って評価させ、コードセルの出力として確認できるのは、カンマで区切った値がタプルとしてパックされるからである。
x, y, z, 7
(1, 3, 5, 7)
一時変数を使うこと無く、以下のコードで変数の値の交換ができるのは、タプルのパックとアンパックによる動作である。
y, z, x = x, y, z
x, y, z
(5, 1, 3)
関数が複数の値を返すことができるのは、関数の戻り値がタプルに変換(パック)されるからである。
def fg(x):
return x ** 2 - 2, 2 * x
r = fg(1)
r
(-1, 2)
type(r)
tuple
fx, gx = r
fx
-1
gx
2
リストから要素をアンパックすることもできる。
a = [0, 2, 4]
x, y, z = a
x
0
y
2
z
4
7.3. 特殊なタプルの作成#
1つの要素からなるタプルを作成する目的で、以下のコードを実行してもタプルにはならない。
t = (1)
t
1
type(t)
int
1つの要素からなるタプルを作成するには、末尾にカンマ,
を付ける。
t = (1,)
t
(1,)
空のタプルはtuple
関数を用いて作る。
t = tuple()
t
()
7.4. リストとタプルの相互変換#
オブジェクトをリストからタプルに変換するには、tuple関数を呼び出す。
a = [1, 3, 5]
a
[1, 3, 5]
type(a)
list
b = tuple(a)
b
(1, 3, 5)
type(b)
tuple
オブジェクトをタプルからリストに変換するにはlist関数を呼び出す。
c = list(b)
c
[1, 3, 5]
type(c)
list