採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

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])  # True

list との違い

観点listtuple
構文[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 を作って分解する関数を完成させる

拡張課題

  1. スワップ: アンパックを使えば一時変数なしで値を入れ替えられる
   a, b = 1, 2
   a, b = b, a      # → a=2, b=1
   
  1. enumerate と tuple: for i, v in enumerate(xs)(i, v) も tuple
   for i, name in enumerate(["a", "b", "c"]):
       print(i, name)
   
  1. 辞書のキー: tuple は dict のキーに使える (list は不可)
   grid = {(0, 0): "start", (3, 4): "goal"}
   print(grid[(0, 0)])   # "start"
   

よくある詰まり

症状原因対処
TypeError: 'tuple' object does not support item assignmenttuple を書き換えようとした新しい tuple を作り直す or list を使う
(1) が int になるカンマ忘れ(1,) と書く
too many values to unpackアンパックの個数が合わない左辺と右辺の個数を一致させる

次に学ぶ領域

領域続けて読む
可変の順序付きデータcollection/ch01-list
キー付きデータcollection/ch03-dict
重複なしのデータcollection/ch04-set
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。