くり返しとデータの持ち方

INPUT · スライド

あとから変えられない組

01 / 07

カンマで並べた組

() の中に値をカンマで並べたものを タプル と呼ぶよ。

見た目はリストとよく似ている。ちがうのはカッコの形だけ——[] がリスト、() がタプルだね。表示するときも () のまま出てくるよ。

sunpou = (150, 3)print(sunpou)

実行結果

(150, 3)

02 / 07

取り出しかたはリストと同じ

中身の取り出しかたは、リストとまったく同じ。0から数える番号で引くし、-1 で末尾も取れる。

スライスも同じように使える。「並んでいるものを同じ書きかたで扱う」という Python の考えかたが、ここにも出ているよ。

sunpou = (150, 3, 20)print(sunpou[0])print(sunpou[-1])print(sunpou[0:2])

実行結果

150
20
(150, 3)

03 / 07

あとから変えられない

ではリストと何がちがうのか。中身を書きかえようとするとエラーになるんだ。

リストなら kudamonos[0] = "みかん" で入れかえられた。タプルはそれができない。足すことも消すこともできないよ。

sunpou = (150, 3)sunpou[0] = 200

実行結果

TypeError: 'tuple' object does not support item assignment

04 / 07

なぜ変えられないほうがいいのか

「できないこと」がなぜ利点になるのか、不思議に思うかもしれない。

答えは、変わってほしくないものを、変わらないと保証できるから。画面の大きさ、曜日の並び、地図の座標——うっかり書きかえてしまったら困るものがある。タプルにしておけば、まちがえた瞬間にエラーで気づけるんだ。

変える予定があるならリスト、無いならタプル。これが選びかたの目安だよ。

youbis = ("げつ", "か", "すい")for youbi in youbis:    print(youbi)

実行結果

げつ
か
すい

05 / 07

1つだけの組はカンマが要る

ここは必ずつまずくところ。要素が1つのタプルは (1,) と書く。うしろにカンマが要るんだ。

(1) と書くと、それはただの 1。カッコは計算の順番を変えるためのカッコとして読まれてしまう。

つまりタプルを作っているのはカッコではなくカンマなんだよ。

hitotsu = (1,)print(hitotsu)kazu = (1)print(kazu)

実行結果

(1,)
1

06 / 07

カッコは省ける

カンマが本体なので、カッコは省いても書ける。sunpou = 150, 3 でもタプルになるよ。

逆向きもできる。tate, yoko = sunpou と書くと、中身を2つの変数に分けて受け取れる。

これ、どこかで見たね。for kagi, atai in hito.items(): がまさにこの形。items() が返していた組はタプルだったんだよ。

sunpou = 150, 3print(sunpou)tate, yoko = sunpouprint(tate)print(yoko)

実行結果

(150, 3)
150
3

07 / 07

リストとタプルの使い分け

最後に整理しよう。

  • リスト [] … あとから足す・消す・入れかえる。件数が増えるもの
  • タプル () … 作ったら変えない。中身の意味が位置で決まっているもの

名簿はリスト、座標はタプル。迷ったらリストでいいけれど、「これは変わらない」と言い切れるならタプルのほうが安全だよ。

これでこのグループはおしまい。番号で引くリスト、名前で引く辞書、変わらない組のタプル——3つの入れ物が手に入ったね。次はこれらとくり返しを全部使う総合演習だよ。

hito = {"namae": "ゆい", "sunpou": (150, 42)}print(hito["sunpou"])

実行結果

(150, 42)