Pythonのタプル型
タプル型はリスト型とよく似たデータ型で、カンマ区切りで複数のデータを保持することが出来ます。
使い方はリスト型とほとんど同じで、設定するそれぞれの値を「要素」と呼び、それぞれの要素には先頭から順番に0から始まるインデックス番号が付けられる点もリスト型と同じです。
リスト型との主な違いは、書き方がリスト型は [ ] であるのが ( ) である点と、要素を変更できない点と、リスト型よりも高速である点です。
個別の要素の値を変更することはできませんが、タプル変数の設定内容を上書きすることは可能です。
タプル型を使う用途としては、本などでは定数であることを強調していることが多いですが、リスト型よりも高速に処理できることを目的に使っていることも少なくありません。リスト型の方が都合がいいのに高速であることを優先してわざわざタプル型を利用するようなこともあります。
ただ、リスト型よりも高速であるとは言っても、何億回も利用するような場面でないとそこまで劇的に変わることもないため、Pythonに慣れないうちはタプル型を使わずにリスト型だけを使うようにしても問題ありません。
タプルの書き方
タプルを作るにはカンマで区切った値を丸括弧 ( ) で囲います。リスト型は角括弧 [ ] で囲うのでその点が異なります。
値を設定せずに ( ) だけを書くことで空のタプルを作成することも可能です。
1 2 |
t = (1, 2, 3) t = () |
リストの値をタプルとして作成する
既に作成済みのリストを使ってタプルを作成することが可能です。
作成にはtuple関数を利用します。
1 2 |
list = [1, 2, 3] t = tuple(list) |
実行結果
(1, 2, 3)
タプルへの要素(値)の追加や更新や削除
先に書いた通り、タプルへの個別の要素の追加や更新や削除はできません。
リスト型の場合は追加のappend関数や削除のremove関数で個別の要素の追加や削除が可能ですが、タプル型の場合はエラーになります。
なお、変数自体の削除を行うdel関数はエラーにならず正常に処理されます。
1 2 |
t = (1, 2, 3, 4, 5) del t |
どうしても更新を行いたい場合はタプル型を利用せずにリスト型を利用するか、後述のタプル型の更新方法で行います。
タプルの更新(書き換え)
作成済みのタプルに対して個別の要素(値)の追加や変更や削除はできませんが、同じタプル変数の書き換えは可能なため、実質的には値の追加や削除を行うことが出来ます。
以下のように同じ変数に違う設定を行うと、タプル変数の設定内容が書き換わります。
1 2 3 4 5 6 |
# 1回目の設定 t = (1, 2, 3, 4, 5) print(t) # 2回目の設定 t = (3, 4, 5) print(t) |
実行結果
(1, 2, 3, 4, 5)
(1, 2, 3)
タプルの要素の数を取得する
タプルに含まれる要素の数を調べる場合はlen関数を利用します。
1 2 |
t = (1, 2, 3, 1, 2, 3) print(len(t)) |
実行結果
6
タプルの値(要素)を参照する
タプルの値(要素)にはインデックス番号が振られています。インデックス番号は「添え字」ともいいます。
タプル変数[インデックス番号] の書き方で要素を参照できます。これはリスト型での書き方と同じです。
以下は4つの要素を持つタプルの2番目(インデックス番号=1)の要素を参照するコードです。
1 2 3 |
a = (1, 111, 'a', 'AAA') b = a[1] print(b) |
実行結果
111
タプルのインデックス番号範囲を参照する
リスト型と同様に、タプルのインデックス番号の範囲を指定して値を参照することも可能です。このような範囲指定で参照する方法を「スライス」や「スライス構文」と言います。
書き方は タプル変数[インデックス番号:インデックス番号] です。コロンの左右のインデックス番号はどちらか一方だけを指定することも可能です。この書き方はリスト型と同じです。
[1:3]の場合はインデックス番号1以上、3未満を意味します。
コロンの左右のインデックス番号の一方だけを指定する場合は、[1:]の場合はインデックス番号1以上、[:4]の場合はインデックス番号4未満を意味します。
1 2 3 |
a = (1, 111, 'a', 'AAA') c = a[1:3] print(c) |
実行結果
(111, ‘a’)
タプルの値からインデックス番号を参照する
リスト型と同様に、タプルの要素からインデックス番号を参照するにはindex関数を利用します。
index関数の引数には値を設定します。タプルに存在しない値を設定した場合はエラーになります。値が存在するかどうかが不明の場合はindex関数を利用する前に後述のin演算子を利用するなどでエラーを回避してください。
タプルの要素「111」のインデックス番号を取得するサンプルです。
1 2 |
a = (1, 111, 'a', 'AAA') print(a.index(111)) |
実行結果
1
タプル内に値があるかを確認する
タプル内に指定した値が存在するかどうかを確認するにはin演算子を利用します。存在していればTrue、存在していなければFalseを返します。
1 2 3 |
t = (1, 2, 3, 1, 2, 3) print(1 in t) print(4 in t) |
実行結果
True
False