タプルの概要(順序があり、変更できない「箱」)
Pythonのタプルは、複数の値を順序付きでまとめる不変(イミュータブル)なデータ構造です。小括弧 () で作り、一度作成したら中身を追加・削除・変更できません。整数・文字列・他のタプルやリストなど、型は混在可能です。設定値や座標、関数の戻り値のまとまりなど「途中で変わっては困るデータ」に向いています。
empty = ()
nums = (1, 2, 3)
mix = ("apple", 123, 3.14, True)
print(type(nums)) # <class 'tuple'>
Python作り方と単一要素の注意(ここが重要)
小括弧あり・なしで作成できる
値をカンマで区切れば、実は小括弧を省略してもタプルになります。読みやすさのために基本は () を付けるのがおすすめです。
t1 = (10, 20, 30)
t2 = 10, 20, 30 # これもタプル
Python単一要素は「カンマが必須」
要素が1つだけのタプルを作るときは末尾のカンマが必要です。小括弧だけでは単なる括弧付きの値になります。
t_ok = (5,) # 1要素のタプル
t_ng = (5) # これは整数 5(タプルではない)
Pythonタプル化とアンパック
既存のシーケンスは tuple(…) でタプルに変換できます。逆にタプルは「アンパック」で手軽に分解できます。
tpl = tuple([1, 2, 3]) # リスト→タプル
a, b, c = tpl # アンパック
print(a, b, c) # 1 2 3
Pythonアクセス・スライス・走査(使い方の基本)
インデックスで参照する
タプルはリストと同様に 0 始まりのインデックスで要素にアクセスできます。負のインデックスは末尾から。
colors = ("red", "green", "blue")
print(colors[0]) # "red"
print(colors[-1]) # "blue"
Pythonスライスで部分抽出
半開区間のスライスで部分範囲を取り出せます。結果は新しいタプルです。
nums = (0, 1, 2, 3, 4, 5)
print(nums[1:4]) # (1, 2, 3)
print(nums[::2]) # (0, 2, 4)
print(nums[::-1]) # 逆順コピー
Python反復処理と内包的な生成
for で順に処理できます。新しいタプルを作るときは tuple(…) で包むのが自然です。
for x in ("A", "B", "C"):
print(x)
squares = tuple(n*n for n in range(5))
print(squares) # (0, 1, 4, 9, 16)
Python不変であることの意味(重要ポイントを深掘り)
「変更できない」から安全で予測可能
タプルは後から append/remove/insert/sort などができません。参照渡しでも中身が変わらないため、関数間の受け渡しや辞書キーとして安心して使えます。
key = (10, 20)
d = {}
d[key] = "point" # タプルは辞書のキーにできる
Python「中のオブジェクト」は変わりうる場合がある
不変なのは「タプルが持つ参照」です。もし中にミュータブル(例:リスト)が入っていると、その中身は変更可能です。設計時に混在を避けるか、用途に応じて使い分けましょう。
t = (1, [2, 3])
t[1].append(4)
print(t) # (1, [2, 3, 4]) ← タプル自体は同じだが中のリストは変わる
Python置き換えが必要なら「新しいタプルを作る」
要素の差し替えや追加をしたい場合は、元を使って再構築します。足し算で連結も可能です。
t = (1, 2, 3)
t = t[:1] + (99,) + t[2:] # 2を99に置換した新タプル
print(t) # (1, 99, 3)
Python実用パターン(関数戻り値・座標・固定レコード)
関数から複数値を返す
複数の結果をひとまとめにして返し、呼び出し側でアンパックします。読みやすく安全です。
def stats(nums):
return (len(nums), sum(nums), min(nums), max(nums))
n, total, mn, mx = stats([10, 20, 5])
print(n, total, mn, mx) # 3 35 5 20
Python座標・色などの固定長データ
x,y 座標や RGB 値など、固定長で意味が定まっているデータはタプルが向いています。
point = (12.3, -4.5)
color = (128, 64, 0)
Python辞書キー・セット要素にする
変更されないまとまりとしてキーや集合要素に使えます。リストはキーになれませんがタプルなら可能です。
visited = set()
visited.add((1, 2)) # 座標を集合管理
Pythonタプル特有の便利な書き方(交換・可変長アンパック)
変数の値を一行で交換
並べ替えが直感的で安全です。
a, b = 1, 2
a, b = b, a
print(a, b) # 2 1
Python可変長アンパック(“残り全部”を受け取る)
星付きで残りをまとめて受け取れます。先頭・末尾固定+中間可変に便利です。
head, *middle, tail = (1, 2, 3, 4, 5)
print(head, middle, tail) # 1 [2, 3, 4] 5
Python例題で身につける(定番から一歩先まで)
例題1:1要素タプルの作成と判定
t = (42,)
print(isinstance(t, tuple), len(t)) # True 1
Python例題2:複数戻り値のアンパック
def divmod_safe(a, b):
if b == 0:
return (None, None)
return (a // b, a % b)
q, r = divmod_safe(10, 3)
print(q, r) # 3 1
Python例題3:辞書キーとしての利用
prices = {("coffee", 350): "hot", ("tea", 280): "ice"}
print(prices[("tea", 280)]) # "ice"
Python例題4:固定レコードの検証と変換
row = ("coffee", 350, 2)
name, price, qty = row
print(f"{name} x{qty} ¥{price}")
Python落とし穴とベストプラクティス(初心者がつまずきやすい点)
単一要素にカンマを忘れる
(5,) のカンマを忘れるとタプルではなく整数になります。型が違ってバグになりがちなので注意しましょう。
中にミュータブルを入れると“実質”変わりうる
不変性を期待する場面では、タプルの中身もイミュータブルに揃えるのが安全です。どうしても必要なら「変更が起きる可能性」を前提に設計します。
“変更したい”ならリストを選ぶ
後から追加・削除・並べ替えが必要なデータは、はじめからリストで持つほうが自然です。タプルは「変わらない保証」が価値になります。
まとめ
タプルは「順序付きだが変更できない」まとまりを表す基本構造です。小括弧とカンマで作り、単一要素ではカンマが必須。インデックスやスライスで参照し、変更が必要なときは新しいタプルを再構築します。関数の複数戻り値、座標や設定など“変わらないまとまり”、辞書キー・集合要素としての利用に強みがあります。中のミュータブルが変わりうる点と、変更が必要ならリストを選ぶ使い分けを押さえれば、初心者でも安全で読みやすいデータ設計ができるようになります。
