L?? ch02 — tuple (タプル)
テクノロジ系 / L05 collection — コレクション
L?? ch02 — tuple (タプル)
「変えない順序付きデータ」をひとまとめにする最小コンテナ
ゴール
()で tuple を作れる- 要素アクセス
t[0]ができる - アンパック
a, b = tができる listとの違い (mutable / immutable) を説明できる
最小例
# main.py point = (3, 4) print(point) # (3, 4) print(point[0]) # 3 print(point[1]) # 4 print(len(point)) # 2
uv run python main.py
tuple とは
- 順序付き (index でアクセスできる)
- イミュータブル (作った後は変更不可)
- 異なる型を混ぜても OK
user = ("Taro", 30, True)
print(user[0]) # "Taro"
print(user[1]) # 30
print(user[2]) # Truelist との違い
| 観点 | list | tuple |
|---|---|---|
| 構文 | [1, 2, 3] | (1, 2, 3) |
| 変更 | 可 (append, [0]=x) | 不可 |
| 用途 | 順次追加するデータ | 固定の組 (座標・行レコード) |
| dict のキー | 使えない | 使える |
xs = [1, 2, 3] xs[0] = 99 # OK ts = (1, 2, 3) ts[0] = 99 # TypeError
アンパック (分解代入)
tuple は「複数値を一度に受け取る」ときに便利。
point = (3, 4)
x, y = point # x=3, y=4
print(x, y)
# 関数の複数戻り値も実は tuple
def min_max(xs):
return min(xs), max(xs)
lo, hi = min_max([5, 1, 9, 3])
print(lo, hi) # 1 9要素 1 個の tuple は要注意
a = (1) # ← これは int の 1 (ただの括弧) b = (1,) # ← これが要素 1 個の tuple print(type(a)) # <class 'int'> print(type(b)) # <class 'tuple'>
カンマの有無で型が変わる。1 要素 tuple は (値,) と書く。
よく使う操作
t = (10, 20, 30, 20) # 個数を数える print(t.count(20)) # 2 # 位置を調べる print(t.index(30)) # 2 # 含まれるか print(20 in t) # True # 連結 (新しい tuple ができる) print(t + (40, 50)) # (10, 20, 30, 20, 40, 50)
drill
drill/ — tuple を作って分解する関数を完成させる
拡張課題
- スワップ: アンパックを使えば一時変数なしで値を入れ替えられる
a, b = 1, 2 a, b = b, a # → a=2, b=1
- enumerate と tuple:
for i, v in enumerate(xs)の(i, v)も tuple
for i, name in enumerate(["a", "b", "c"]):
print(i, name)
- 辞書のキー: tuple は dict のキーに使える (list は不可)
grid = {(0, 0): "start", (3, 4): "goal"}
print(grid[(0, 0)]) # "start"
よくある詰まり
| 症状 | 原因 | 対処 |
|---|---|---|
TypeError: 'tuple' object does not support item assignment | tuple を書き換えようとした | 新しい tuple を作り直す or list を使う |
(1) が int になる | カンマ忘れ | (1,) と書く |
too many values to unpack | アンパックの個数が合わない | 左辺と右辺の個数を一致させる |
次に学ぶ領域
| 領域 | 続けて読む |
|---|---|
| 可変の順序付きデータ | collection/ch01-list |
| キー付きデータ | collection/ch03-dict |
| 重複なしのデータ | collection/ch04-set |
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。